设计模式之桥梁模式

2017-06-14  本文已影响35人  老羊_肖恩

桥梁模式的定义

桥梁模式(Bridge Pattern)也叫做桥接模式,是一个比较简单的模式,其定义如下: Decouple an abstraction from its implementation so that the two can very independently. 即:将抽象和实现解耦,使得两者可以独立的变化。
  桥梁模式的重点在于解耦,通用类图如下:


Bridge.png

我们先看看桥梁模式的四个角色:

//实现化角色
public interface Implementor{
    //基本方法
    public void doSomething();
    public void doAnything();
}

//具体实现化角色
public class ConcreteImplementor1 implements Implementor{

    @Override
    public void doSomething() {
        System.out.println("ConcreteImplementor 1 doSomething...");
    }

    @Override
    public void doAnything() {
        System.out.println("ConcreteImplementor 1 doAnything...");
    }
    
}

//具体实现化角色
public class ConcreteImplementor2 implements Implementor{
    
    @Override
    public void doSomething() {
        System.out.println("ConcreteImplementor 2 doSomething...");
    }
    
    @Override
    public void doAnything() {
        System.out.println("ConcreteImplementor 2 doAnything...");
    }
    
}

//抽象化角色
public abstract class Abstraction{
    //定义对实现化角色的引用
    private Implementor impl;
    //约束子类必须实现构造函数
    public Abstraction(Implementor impl){
        this.impl = impl;
    }
    
    //自身的行为和属性。
    public void request(){
        this.impl.doSomething();
    }
    
    //获得实现化角色
    public Implementor getImplementor(){
        return this.impl;
    }
}

//具体抽象化角色
public class RefinedAbstraction extends Abstraction{

    public RefinedAbstraction(Implementor impl) {
        super(impl);
    }
    
    //修正父类行为
    @Override
    public void request(){
        super.request();
        super.getImplementor().doAnything();
    }
    
}

//客户端
public class BridgeClient{ 
    public static void main(String[] args) {
        //定义一个实现化角色
        Implementor impl1 = new ConcreteImplementor1();
        //定义一个抽象化角色
        Abstraction abs1 = new RefinedAbstraction(impl1);
        //执行
        abs1.request();
        System.out.println("------------------------");
        //定义一个实现化角色
        Implementor impl2 = new ConcreteImplementor2();
        //定义一个抽象化角色
        Abstraction abs2 = new RefinedAbstraction(impl2);
        //执行
        abs2.request();
    }
}

通用代码运行结果如下:

ConcreteImplementor 1 doSomething...
ConcreteImplementor 1 doAnything...
------------------------
ConcreteImplementor 2 doSomething...
ConcreteImplementor 2 doAnything...

桥梁模式的应用

桥梁模式的优点

桥梁模式使用场景

《注》以上内容总结自秦小波-《设计模式之禅》,仅为个人学习笔记

上一篇 下一篇

猜你喜欢

热点阅读