zoukankan      html  css  js  c++  java
  • 桥接模式

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

    理解:实现系统可能有多个角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。
    比如:手机有很多品牌,每种品牌的手机都有多个不用的游戏。

    则可以分为手机品牌和手机软件,手机软件属于手机品牌,它们属于聚合关系。

    桥接模式的核心意图就是把这些实现独立出来,让它们各自的变化,这就使得每种实现的变化不会影响其他实现,从而达到应对变化的目的。

    当我们发信啊需要多角度去分类实现对象,而只用继承会造成大量的类增加,不能满足开放-封闭原则时,就应该考虑用桥接模式了。

    MobileBrand类

    package bridge;
    
    public abstract class MobileBrand {
        protected MobileSoft soft ;
        public void setMobileSoft(MobileSoft soft){
            this.soft = soft;
        }
        public abstract void run();
    }

    MobileBrandM类

    package bridge;
    
    public class MobileBrandM extends MobileBrand {
    
        @Override
        public void run() {
            soft.run();
        }
    
    }

    MobileBrandN类

    package bridge;
    
    public class MobileBrandN extends MobileBrand {
    
        @Override
        public void run() {
            soft.run();
        }
    
    }

    MobileSoft类

    package bridge;
    
    public abstract class MobileSoft {
        public abstract void run();
    }

    MobileSoftA类

    package bridge;
    
    public class MobileSoftA extends MobileSoft {
    
        @Override
        public void run() {
            System.out.println("运行手机软件A");
        }
    
    }

    MobileSoftB类

    package bridge;
    
    public class MobileSoftB extends MobileSoft {
    
        @Override
        public void run() {
            System.out.println("运行手机软件B");
        }
    
    }

    MobileSoftC类

    package bridge;
    
    public class MobileSoftC extends MobileSoft {
    
        @Override
        public void run() {
            System.out.println("运行手机软件C");
        }
    
    }

    Business类

    package bridge;
    
    public class Business {
    
        public static void main(String[] args) {
            MobileBrand bandM = new MobileBrandM();
            bandM.setMobileSoft(new MobileSoftA());
            bandM.run();
            bandM.setMobileSoft(new MobileSoftB());
            bandM.run();
            MobileBrand bandN = new MobileBrandM();
            bandN.setMobileSoft(new MobileSoftA());
            bandN.run();
            bandN.setMobileSoft(new MobileSoftB());
            bandN.run();
            bandN.setMobileSoft(new MobileSoftC());
            bandN.run();
        }
    
    }
  • 相关阅读:
    阅读计划博文
    系统设计时所实现的质量属性战术
    关于如何提高系统的可用性和易用性
    jdbc.properties
    JDBCUtil
    软件质量属性的场景描述
    架构漫谈阅读笔记
    软件架构师工作过程
    orm框架中entityframework的 增删改查操作
    事件和委托
  • 原文地址:https://www.cnblogs.com/ccgjava/p/7152919.html
Copyright © 2011-2022 走看看