模式意图
这个模式使用的并不多,但是思想确实很普遍。就是要分离抽象部分与实现部分。
实现弱关联,即在运行时才产生依赖关系。
降低代码之间的耦合。
模式结构
Abstraction 抽象部分的基类,定义抽象部分的基础内容。
RefinedAbstraction 抽象部分的扩充,用于对基类的内容补充,添加特定场景的业务操作。
Implementor 实现部分的基类,定义实现部分的基本内容。
ConcreteImplementor 具体的实现类。
应用场景
1 不希望在抽象和它的实现部分之间有一个固定的绑定关系
2 抽象部分以及实现部分都想通过子类生成一定的扩充内容
3 对一个抽象的实现部分的修改对客户不产生影响
代码结构
1 package com.xingoo.test; 2 /** 3 * 抽象类基类 4 * @author xingoo 5 */ 6 abstract class Abstraction{ 7 abstract public void operation(Implementor imp); 8 } 9 /**10 * 实现类 基类11 * @author xingoo12 */13 abstract class Implementor{14 abstract public void operation();15 }16 /**17 * 重新定义的抽象类18 * @author xingoo19 */20 class RefinedAbstraction extends Abstraction{21 public void operation(Implementor imp){22 imp.operation();23 System.out.println("RefinedAbstraction");24 }25 }26 /**27 * 具体的实现类28 * @author xingoo29 */30 class ConcreteImplementorA extends Implementor{31 public void operation() {32 System.out.println("ConcreteImplementorA");33 }34 }35 /**36 * 具体的实现类37 * @author xingoo38 */39 class ConcreteImplementorB extends Implementor{40 public void operation() {41 System.out.println("ConcreteImplementorB");42 }43 }44 public class test {45 public static void main(String[] args){46 RefinedAbstraction abstraction = new RefinedAbstraction();47 abstraction.operation(new ConcreteImplementorA());48 49 abstraction.operation(new ConcreteImplementorB());50 }51 }52
运行结果
ConcreteImplementorARefinedAbstractionConcreteImplementorBRefinedAbstraction