合成/聚合复用原则:尽量使用合成/聚合,尽量不要使用类继承。
桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立变化。
解释:即一个系统可以有多种分类实现,把没种分类独立出来,让他们可以独自变化,减少他们之间的耦合。
简单描述:1个Abstraction类,持有一个Implementor的引用,其方法中调用此Implementor引用的对应方法
大话设计模式中的截图:
代码例子:
Abstraction类:
1 package com.longsheng.bridge;
2
3 public class Abstraction {
4
5 protected Implementor mImplementor;
6
7 public void setImplementor(Implementor mImplementor) {
8 this.mImplementor = mImplementor;
9 }
10
11 public void operation() {
12 mImplementor.operation();
13 }
14
15 }
RefinedAbstraction类:
1 package com.longsheng.bridge;
2
3 public class RefinedAbstraction extends Abstraction {
4
5 @Override
6 public void operation() {
7 super.operation();
8 }
9
10 }
Implementor类:
1 package com.longsheng.bridge;
2
3 public abstract class Implementor {
4
5 public abstract void operation();
6
7 }
ConcreteImplementorA类:
1 package com.longsheng.bridge;
2
3 public class ConcreteImplementorA extends Implementor {
4
5 @Override
6 public void operation() {
7 System.out.println("具体实现A的执行");
8 }
9
10 }
ConcreteImplementorB类:
1 package com.longsheng.bridge;
2
3 public class ConcreteImplementorB extends Implementor {
4
5 @Override
6 public void operation() {
7 System.out.println("具体实现B的执行");
8 }
9
10 }
客户端:
1 package com.longsheng.bridge;
2
3 public class Client {
4
5 public static void main(String[] args) {
6 Abstraction mAbstraction = new RefinedAbstraction();
7
8 mAbstraction.setImplementor(new ConcreteImplementorA());
9 mAbstraction.operation();
10
11 mAbstraction.setImplementor(new ConcreteImplementorB());
12 mAbstraction.operation();
13 }
14
15 }
运行结果:
1 具体实现A的执行
2 具体实现B的执行
这个模式的使用场景我还不是很清楚,书中举的例子是手机品牌和手机软件,这两者作为分类,UML图如下所示(具体代码就不写了):
时间: 2024-12-17 01:40:40