美文网首页
桥接模式

桥接模式

作者: 突然的自我_39c1 | 来源:发表于2021-04-19 10:06 被阅读0次

    一、优点:
    1. 将抽象部份与它的实现部份分离,使它们都可以独立地变化;遵循依赖倒置原则;
    2. 将可以共享的变化部分,抽离出来,减少了代码的重复信息;
    3. 桥接模式是一种很实用的结构型模式,如果软件系统中某个类存在两个独立变化的维度,通过该模式可以将这两个维度分离出来,使两者可以独立扩展,让系统更加符合单一职责原则。
    二、原则:
    设计中有超过一维的变化我们就可以用桥模式。如果只有一维在变化,那么我们用继承就可以圆满的解决问题。优先使用对象的合成/聚合将有助于保持每个类被封装,并被集中在单个任务上。这样类和类继承层次会保持较小规模,并且不太可能增长为不可控制的庞然大物。
    三、常用的场景:
    1. 当一个对象有多个变化因素的时候,考虑依赖于抽象的实现,而不是具体的实现。
    2. 当多个变化因素在多个对象间共享时,考虑将这部分变化的部分抽象出来再聚合/合成进来。
    3. 当我们考虑一个对象的多个变化因素可以动态变化的时候,考虑使用桥接模式。
    四、实例:
    在不同品牌电脑上安装操作系统;不同品牌电脑可以是联想、Dell、苹果、方正、宏基等等;不同操作系统可以是windows10、Mac os、linux等等;可以将操作系统、品牌电脑按各自的方向抽象;再通过合成/聚合的方式关联起来;

    //操作系统
    class OS
    {
    public:
        virtual void InstallOS_Imp() {}
    };
    class WindowOS: public OS
    {
    public:
        void InstallOS_Imp() { cout<<"安装Window操作系统"<<endl; } 
    };
    class LinuxOS: public OS
    {
    public:
        void InstallOS_Imp() { cout<<"安装Linux操作系统"<<endl; } 
    };
    class UnixOS: public OS
    {
    public:
        void InstallOS_Imp() { cout<<"安装Unix操作系统"<<endl; } 
    };
    //计算机
    class Computer
    {
    public:
        virtual void InstallOS(OS *os) {}
    };
    class DellComputer: public Computer
    {
    public:
        void InstallOS(OS *os) { os->InstallOS_Imp(); }
    };
    class AppleComputer: public Computer
    {
    public:
        void InstallOS(OS *os) { os->InstallOS_Imp(); }
    };
    class HPComputer: public Computer
    {
    public:
        void InstallOS(OS *os) { os->InstallOS_Imp(); }
    };
    int main()
    {
        OS *os1 = new WindowOS();
        OS *os2 = new LinuxOS();
        Computer *computer1 = new AppleComputer();
        computer1->InstallOS(os1);
        computer1->InstallOS(os2);
    }
    

    相关文章

      网友评论

          本文标题:桥接模式

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