定义 将抽象和实现解耦,使得两者可以独立地变化
类图
通用代码
//实现化角色
public interface Implementor {
public void doSomething();
public void doAnyThing();
}
//具体实现化角色
public class ConcreteImplementor1 implements Implementor {
@Override
public void doSomething() {
}
@Override
public void doAnyThing() {
}
}
//抽象化角色
public class Abstaction {
private Implementor imp;
public Abstaction(Implementor _imp){
this.imp=_imp;
}
//自身的行为和属性
public void request() {
this.imp.doSomething();
}
//获得实现化角色
public Implementor getImp(){
return imp;
}
}
//具体抽象化角色
public class RedifneAbsraction extends Abstaction {
public RedifneAbsraction(Implementor _imp) {
super(_imp);
}
@Override
public void request() {
super.request();
super.getImp().doAnyThing();
}
}
//场景类
public class Client {
public static void main(String[] args) {
Implementor imp = new ConcreteImplementor1();
Abstaction abs = new RedifneAbsraction(imp);
abs.request();
}
}
优点
1. 抽象和实现分离
2. 优秀的扩充能力 不管是增加抽象还是实现,都很容易
3. 实现细节对客户透明
使用场景
1. 不希望或不适合使用集成的场景
2. 接口或抽象类不稳定的场景
3. 重用性要求较高的场景 设计的颗粒度越细,则被重用的可能性就越大