前言:【模式总览】——————————by xingoo
模式意图
这个模式使用的并不多,但是思想确实很普遍。就是要分离抽象部分与实现部分。
实现弱关联,即在运行时才产生依赖关系。
降低代码之间的耦合。
模式结构
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 xingoo 12 */ 13 abstract class Implementor{ 14 abstract public void operation(); 15 } 16 /** 17 * 重新定义的抽象类 18 * @author xingoo 19 */ 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 xingoo 29 */ 30 class ConcreteImplementorA extends Implementor{ 31 public void operation() { 32 System.out.println("ConcreteImplementorA"); 33 } 34 } 35 /** 36 * 具体的实现类 37 * @author xingoo 38 */ 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
运行结果
ConcreteImplementorA
RefinedAbstraction
ConcreteImplementorB
RefinedAbstraction