zoukankan      html  css  js  c++  java
  • Bridge

    桥接模式:将抽象部分和它实现的部分分离,使得它们都可以独立地变化。

    什么叫抽象与它的实现分离,并不是说,让抽象与其派生类分离,因为这是没有任何意义。实现是指抽象类和它的派生类用自己的对象。如:手机既可以按照品牌来分类,也可以按照功能来分类。

    Bridge模式是构造型的设计模式之一。Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任。它的主要特点是把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展。

    实现系统可能有多角度分类,每一种分类都有可能变化,那么把这种多角度分离出来让它们独立变化,减少它们之间的耦合。

    public abstract class PhoneSoft {
    
        public abstract void run();
    
    }
    
    class Game extends PhoneSoft{
    
        @Override
        public void run() {
            System.out.println("运行手机游戏!");
        }
        
    }
    
    //若添加手机软件,只需要再写一个类继承。
    class Address extends PhoneSoft{
    
        @Override
        public void run() {
            System.out.println("运行手机通讯录!");
        }
    
    }
    public abstract class PhoneBrand {
    
        protected String name;
    
        //聚合关系
        protected PhoneSoft soft;
    
        public PhoneBrand(String name) {
            this.name = name;
        }
    
        //设置手机软件,品牌需要关注软件
        public void setPhoneSoft(PhoneSoft soft) {
            this.soft = soft;
        }
    
        public abstract void opera();
    
    }
    
    class BrandM extends PhoneBrand {
    
        public BrandM(String name) {
            super(name);
        }
    
        @Override
        public void opera() {
            System.out.println("The Brand is " + name);
            soft.run();
        }
    
    }
    
    class BrandN extends PhoneBrand {
    
        public BrandN(String name) {
            super(name);
        }
    
        @Override
        public void opera() {
            System.out.println("The Brand is " + name);
            soft.run();
        }
    
    }
        public static void main(String[] args) {
            PhoneSoft game = new Game();
            PhoneSoft address = new Address();
            
            PhoneBrand brandM = new BrandM("M");
            PhoneBrand brandN = new BrandM("N");
            
            brandM.setPhoneSoft(game);
            brandN.setPhoneSoft(address);
            
            brandM.opera();
            brandN.opera();
        }

    打印结果:
    The Brand is M
    运行手机游戏!
    The Brand is N
    运行手机通讯录!

  • 相关阅读:
    程序是访问数据库的组件
    Mac搭建Vue
    Sharding-JDBC基本使用,整合Springboot实现分库分表,读写分离
    随意写写
    maven打包工具assembly打包本地jar的解决办法
    Go语言笔记 (2) 变量命名与多重赋值
    Go语言笔记(1)变量的定义与赋值
    c期末笔记(4)
    c期末笔记(3)
    c期末笔记(2)
  • 原文地址:https://www.cnblogs.com/xuekyo/p/2613332.html
Copyright © 2011-2022 走看看