結(jié)構(gòu)模式:描述如何將類或者對象組合在一起形成更大的結(jié)構(gòu)。
適配器模式:把一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配而無法在一起工作的兩個類能夠在一起工作。
使用場合:
1)系統(tǒng)需要使用現(xiàn)有的類,而此類的接口不符合系統(tǒng)的需要。
2)想要建立一個可以重復(fù)使用的類,用于與一些彼此之間沒有太大關(guān)聯(lián)的一些類,包括一些可能在將來引進的類一起工作。這些源類不一定有很復(fù)雜的接口。
3)(對對象的適配器模式而言)在設(shè)計里,需要改變多個已有的子類的接口,如果使用類的適配器模式,就要針對每一個子類做一個適配器類,而這不太實際。
類/對象的適配器模式:
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)系統(tǒng)需要使用現(xiàn)有的類,而此類的接口不符合系統(tǒng)的需要。
2)想要建立一個可以重復(fù)使用的類,用于與一些彼此之間沒有太大關(guān)聯(lián)的一些類,包括一些可能在將來引進的類一起工作。這些源類不一定有很復(fù)雜的接口。
3)(對對象的適配器模式而言)在設(shè)計里,需要改變多個已有的子類的接口,如果使用類的適配器模式,就要針對每一個子類做一個適配器類,而這不太實際。
類/對象的適配器模式:
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();
}
}