• 桥接模式


    桥接模式(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();
        }
    
    }
  • 相关阅读:
    堆栈之链表实现
    队列之数组实现
    堆栈之数组实现
    线性表之循环双链表
    GMAP 集合已修改;可能无法执行枚举操作 错误【正解】(原创)
    大智慧选股公式
    获取股票实时交易数据的方法
    GMAP谷歌地图的纠偏 保密算法
    GMAP 判断一个坐标点是否在不规则多边形内部的算法
    SQL快速操作技巧2_datatable批量更新到数据表
  • 原文地址:https://www.cnblogs.com/ccgjava/p/7152919.html
Copyright © 2020-2023  润新知