定义
将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。
适配器通过实现目标接口,将自己包装成真正需要的类型,而在内部通过组合被适配的类型,表面调用的是目标类型的方法,实际上是由被适配类型方法实现的。
eg:
public class IteratorAdapter implements Enumeration {
Iterator iterator;
public IteratorAdapter(Iterator iterator){
this.iterator = iterator;
}
@Override
public boolean hasMoreElements() {
return iterator.hasNext();
}
@Override
public Object nextElement() {
return iterator.next();
}
}
1.装饰者是添加新的行为或者责任,适配器是转换接口
2.适配器一定会转换接口,但是装饰者不会改变接口。
design-mode-demo/pattern/adapter
定义
提供一个统一的接口,访问子系统中的一群接口。外观模式定义了一个高层接口,让子系统更容易使用。
eg:
public class A {
void a1();
void a2();
}
public class B {
void b1();
void b2();
void b3();
}
public class C {
void c1();
void c2();
}
A a = new A();
B b = new B();
C c = new C();
a.a1();
b.b2();
c.c1();
a.a2();
b.b1();
c.c2();
b.b3();
public class T{
A a;
B b;
C c;
public T(A a, B b, C c){
this.a = a;
this.b = b;
this.c = c;
}
public void t(){
a.a1();
b.b2();
c.c1();
a.a2();
b.b1();
c.c2();
b.b3();
}
}
简化原有复杂接口的同时,依然将完整的功能暴露出来,以供他人使用。
关注的意图不同:
适配器是改变(转换)接口,符合当下的所需。
外观模式,提供子系统的一个简化接口。
最少知识原则:只和你的密友谈话。
解析:
在设计过程中,不要让太多的类耦合在一起。如果许多类之间相互依赖,那么系统之间就会变的复杂,难以维护。
方针:
调用属于以下范围的方法:
该对象本身
被当作方法的参数而传递进来的对象
此方法所创建或实例化的任何对象
对象的任何组件
适配器将一个对象包装起来以改变其接口;
装饰者将一个对象包装起来以增加新的行为和责任;
外观模式将一群对象“包装”(被包装的对象的接口依然完全暴露)起来以简化其接口,