一文速通23种设计模式——单例模式、工厂模式、建造者模式、原型模式、代理模式、装饰器模式、组合模式、组合模式、桥接模式、观察者模式、策略模式……-第四部分 分开考虑

桥接模式 (Bridge)

Bridge是桥的意思,在这里指的是,用桥梁把类的功能层次和类的实现层次连接起来。

类的功能层次指的是,为了不断实现更多的功能,将类一层一层地不断继承,并在每次继承添加新的功能。

类的实现层次则是指,定义父类和子类,父类定义接口,子类实现接口。

这种区别会使得编程变得复杂,我们不清楚应该是在哪一个层次结构中去增加子类。而如果把两种层次拆成独立结构,再用桥接模式连接起来,那么这个问题就解决了。

桥接模式有以下登场角色:

  1. 抽象化 Abstraction
  2. 改善后的抽象化 RefinedAbstraction
  3. 实现者 Implementor
  4. 具体实现者 ConcreteImplementor

抽象是功能层次的顶层,里面有一个实现者的成员变量(这里使用了委托);改善后的抽象化则是功能层次中添加功能的子类。

实现者是实现层次的顶层,里面有抽象方法接口;再由具体实现者去实现其中的接口。

使用实例如下:

public class Main {
    public static void main(String[] args) {
        Abstraction d1 = new Abstraction(new ConcreteImplementor("Hello, China."));
        Abstraction d2 = new RefinedAbstraction(new ConcreteImplementor("Hello, World."));
        RefinedAbstraction d3 = new RefinedAbstraction(new ConcreteImplementor("Hello, Universe."));
        d1.display();
        d2.display();
        d3.display();
        d3.multiDisplay(5); //RefinedAbstraction的新功能
    }
}

为什么要使用桥接模式

将两个层次分开后,将共容易实现扩展。要增加新功能时,只需要在功能实现一侧增加类,随后所有的实现都可以使用。

策略模式 (Strategy)

这个模式时为了算法而服务的。Strategy的意思是“策略”。针对不同的问题,需要不同的算法,册罗模式就可以运行我们只对算法进行修改,而其它的部分不需要变动。

策略模式有以下登场角色:

  1. 策略 Strategy
  2. 具体的策略 ConcreteStrategy
  3. 上下文 Context

策略复杂定义接口,保证所有具体策略都可以嵌入上下文中;具体策略则是实现接口,编写具体的算法;上下文负责使用策略,调用具体的策略去实现需求。

为什么要使用策略

虽然这样一看,程序好像变复杂了,但是对于实际场景里,算法可能会异常复杂,有时候升值需要交给专门的人处理。由于使用了委托的模式来使用策略,使得策略与上下文解耦,可以很方便的替换或者复用算法。

另外,由于委托降低了耦合度,我们可以实现根据环境自动切换算法,如系统内存低时就切换占用内存少且速度慢的算法,系统内存高时就切换内存呢占用高且快速的算法。这在强耦合程序中是很难实现的。

上一篇:热门新游 2024 植物大战僵尸杂交版 Mac 版本下载安装详细教程


下一篇:mars3d实现geojson文件xxx.json格式等实现贴地效果