模式意图
这个模式使用的并不多,但是思想确实很普遍。就是要分离抽象部分与实现部分。
实现弱关联,即在运行时才产生依赖关系。
降低代码之间的耦合。
模式结构
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