结构模式:描述如何将或者对象组合在一起形成更大的结构。

适配器模式:把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
使用场合
1)系统需要使用现有的类,而此类的接口不符合系统的需要。
2)想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。这些源类不一定有很复杂的接口。
3)(对对象的适配器模式而言)在设计里,需要改变多个已有的子类的接口,如果使用类的适配器模式,就要针对每一个子类做一个适配器类,而这不太实际。


类/对象的适配器模式:
1. com.cleversoft.designpatterns.adapter.Target.java:
package com.cleversoft.designpatterns.adapter;

public interface Target {
    
public void request();
}

2. com.cleversoft.designpatterns.adapter.Adaptee.java:
package com.cleversoft.designpatterns.adapter;

public class Adaptee {
    
public void specificRequest() {
        System.out.println(
"Adaptee: SpecificRequest");
    }

}

3. com.cleversoft.designpatterns.adapter.ClassAdapter.java:
package com.cleversoft.designpatterns.adapter;

public class ClassAdapter extends Adaptee implements Target {
    
public void request() {
        specificRequest();
    }

}

4. com.cleversoft.designpatterns.adapter.ObjectAdapter.java:
package com.cleversoft.designpatterns.adapter;

public class ObjectAdapter implements Target {
    
private Adaptee adaptee;

    
public ObjectAdapter(Adaptee adaptee) {
        
this.adaptee = adaptee;
    }


    
public void request() {
        adaptee.specificRequest();
    }

}

5. com.cleversoft.designpatterns.adapter.Client.java:
package com.cleversoft.designpatterns.adapter;

public class Client {

    
public static void main(String[] args) {
        System.out.println(
"Object Adapter");
        Adaptee adaptee 
= new Adaptee();
        ObjectAdapter objectAdapter 
= new ObjectAdapter(adaptee);
        objectAdapter.request();

        System.out.println(
"Class Adapter");
        ClassAdapter classAdapter 
= new ClassAdapter();
        classAdapter.request();
    }


}


参考资料:
1. 《Java与模式》
2. Thinking in Patterns

欢迎大家访问我的个人网站 萌萌的IT人