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();
        }
    
    }
  • 相关阅读:
    P2257 YY的GCD(莫比乌斯反演)
    P2522 [HAOI2011]Problem b(莫比乌斯反演)
    HAProxy 配置文件
    Android5.1 默认主launcher、强制主launcher
    【Spring 从0开始】IOC容器的Bean管理
    【Spring 从0开始】IOC容器的Bean管理
    【Spring 从0开始】IOC容器的Bean管理
    Linux 命令里两个连续的减号(--)是表示什么?
    从k8s集群中删除节点后重新加入的方法
    下载外网docker镜像的方法
  • 原文地址:https://www.cnblogs.com/ccgjava/p/7152919.html
Copyright © 2011-2022 走看看