桥接模式

作者: fancy_boy_石嘉成 | 来源:发表于2018-07-29 17:56 被阅读1次

    《大话设计模式》阅读笔记和总结。原书是C#编写的,本人用Java实现了一遍,包括每种设计模式的UML图实现和示例代码实现。
    目录:设计模式
    Github地址:DesignPattern

    说明

    定义:桥接模式(Bridge),将抽象部分与它的实现部分分离,使它们都可以独立地变化。

    UML图:

    桥接模式UML图.png

    代码实现:

    Implementor类

    abstract class Implementor{
        public abstract void Operation();
    }
    

    ConcreteImplementorA和ConcreteImplementorB等派生类

    class ConcreteImplementorA extends Implementor{
    
        @Override
        public void Operation() {
            System.out.println("具体实现A的方法执行");
        }
    }
    
    class ConcreteImplementorB extends Implementor{
    
        @Override
        public void Operation() {
            System.out.println("具体实现B的方法执行");
        }
    }
    

    Abstraction类

    class Abstraction{
        protected Implementor implementor;
    
        public void setImplementor(Implementor implementor) {
            this.implementor = implementor;
        }
    
        public void Operation(){
            implementor.Operation();
        }
    }
    

    RefinedAbstraction类

    class RefinedAbstraction extends Abstraction{
        @Override
        public void Operation() {
            implementor.Operation();
        }
    }
    
    

    客户端代码

    public class BridgePattern {
        public static void main(String[] args){
            Abstraction ab = new RefinedAbstraction();
            ab.setImplementor(new ConcreteImplementorA());
            ab.Operation();
    
            ab.setImplementor(new ConcreteImplementorB());
            ab.Operation();
        }
    }
    

    运行结果

    具体实现A的方法执行
    具体实现B的方法执行
    

    示例

    例子:我们原来用的手机都是分为不同的品牌,每种手机里面都内置了很多小游戏,同时也有很多软件,但是不同手机之间的游戏是不能互相移植的。用程序模拟这个情景。

    UML图:

    桥接模式示例UML图.png

    代码实现:

    手机品牌类

    public abstract class HandsetBrand {
        protected HandsetSoft soft;
    
        public void setSoft(HandsetSoft soft) {
            this.soft = soft;
        }
    
        //运行
        public abstract void Run();
    }
    
    

    手机品牌M

    public class HandsetBrandM extends HandsetBrand {
    
        @Override
        public void Run() {
            soft.Run();
        }
    }
    

    手机品牌N

    public class HandsetBrandN extends HandsetBrand {
    
        @Override
        public void Run() {
            soft.Run();
        }
    }
    

    手机软件

    public abstract class HandsetSoft {
        public abstract void Run();
    }
    

    游戏、通讯录等具体类

    手机游戏

    public class HandsetGame extends HandsetSoft {
        @Override
        public void Run() {
            System.out.println("运行手机游戏");
        }
    }
    

    手机通讯录

    public class HandsetAddressList extends HandsetSoft {
        @Override
        public void Run() {
            System.out.println("运行手机通讯录");
        }
    }
    
    

    客户端代码

    public class Main {
        public static void main(String[] args){
            HandsetBrand ab;
            ab = new HandsetBrandN();
    
            ab.setSoft(new HandsetGame());
            ab.Run();
    
            ab.setSoft(new HandsetAddressList());
            ab.Run();
    
            ab = new HandsetBrandM();
    
            ab.setSoft(new HandsetGame());
            ab.Run();
    
            ab.setSoft(new HandsetAddressList());
            ab.Run();
    
        }
    }
    

    运行结果

    运行手机游戏
    运行手机通讯录
    运行手机游戏
    运行手机通讯录
    

    相关文章

      网友评论

        本文标题:桥接模式

        本文链接:https://www.haomeiwen.com/subject/ychtvftx.html