首页 > 编程语言 >07.(结构型模式)java设计模式之桥接模式

07.(结构型模式)java设计模式之桥接模式

时间:2023-01-08 15:35:25浏览次数:41  
标签:角色 桥接 void 模式 color 设计模式 public

一、什么是桥接模式模式

桥梁模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化”

应用场景

  • 系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性
  • 不想使用继承导致系统类的个数急剧增加的系统
  • 有时候一个类,可能会拥有多个变化维度,比如啤酒,有不同的容量和品牌,可以使用继承组合的方式进行开发,假如维度很多,就容易出现类的膨胀,使用桥接模式就可以解决这个问题,且解耦

二、桥接模式的实现方式

模式结构分析:

 桥接模式所涉及的角色有:

  ●  抽象化(Abstraction)角色:抽象化给出的定义,并保存一个对实现化对象的引用。

  ●  修正抽象化(RefinedAbstraction)角色:扩展抽象化角色,改变和修正父类对抽象化的定义。

  ●  实现化(Implementor)角色:这个角色给出实现化角色的接口,但不给出具体的实现。必须指出的是,这个接口不一定和抽象化角色的接口定义相同,实际上,这两个接口可以非常不一样。实现化角色应当只给出底层操作,而抽象化角色应当只给出基于底层操作的更高一层的操作。

  ●  具体实现化(ConcreteImplementor)角色:这个角色给出实现化角色接口的具体实现。

案例中类关系图:

统一模型:

代码实现:

查看代码
public abstract class Phone {
    /**
     * 通过组合的⽅式来桥接其他⾏为
     */
    protected Color color;
    public void setColor(Color color) {
        this.color = color;
    }
    /**
     * ⼿机的⽅法
     */
    abstract public void run();
}
//颜色维度
public interface Color {
    void userColor();
}
/*
* 具体的手机(iphone)
* */
public class IPhone extends Phone {
    public IPhone(Color color){
        super.setColor(color);
    }
    @Override
    public void run() {
       color.userColor();
        System.out.println("苹果⼿机");
    }
}
/*
*具体的手机(huawei)
* */
public class HWPhone extends Phone {

    public HWPhone(Color color){
        super.setColor(color);
    }
    @Override
    public void run() {
        color.userColor();
        System.out.println("华为⼿机");
    }
}/*
* 具体的颜色(红色)
* */
public class RedColor implements Color{
    @Override
    public void userColor() {
        System.out.println("红色");
    }
}
/*
 * 具体的颜色(黄色)
 * */
public class YellowColor implements Color {
    @Override
    public void userColor() {
        System.out.println("黄色");
    }
}
/*
 * 具体的颜色(蓝色)
 * */
public class BlueColor implements Color {
    @Override
    public void userColor() {
        System.out.println("蓝⾊");
    }
}

测试用例:

/*
* 桥接模式
* */
@Test
public void brigeDesign(){
    HWPhone blueHwPhone = new HWPhone(new BlueColor());
    blueHwPhone.run();
    HWPhone redHwPhone = new HWPhone(new RedColor());
    redHwPhone.run();
    IPhone applePhone = new IPhone(new RedColor());
    applePhone.run();
}

测试结果:

蓝⾊
华为⼿机
红色
华为⼿机
红色
苹果⼿机

方法评估:

按GOF的说法,桥接模式和适配器模式用于设计的不同阶段

  • 桥接模式用于设计的前期,精细化的设计,让系统更加灵活。
  • 适配器模式用于设计完成之后,发现类、接口之间无法一起工作,需要进行填坑。

适配器模式经常用在第三方API协同工作的场合,在功能集成需求越来越多的今天,这种模式的使用频度越来越高,包括有些同学听过外观设计模式,这个也是某些场景和适配器模式一样

优点:

  • 抽象和实现的分离。
  • 优秀的扩展能力,符合开闭原则缺点。

缺点:

  • 增加系统的理解与设计难度。
  • 使用聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程,比如抽象类汽车,里面聚合了颜色类,有点像对象适配器。

标签:角色,桥接,void,模式,color,设计模式,public
From: https://www.cnblogs.com/q994321263/p/16961851.html

相关文章

  • 06.(结构型模式)java设计模式之适配器模式
    一、什么是适配器模式(AdapterPattern)作为两个不兼容的接口之间的桥梁,适配器模式使得原本由于接口不兼容而不能一起工作的两个类可以一起工作。适配器模式包括3种形式:......
  • 3108 9361 9460等卡在浪潮两路机器UEFI模式下配置步骤
    1.RAID卡信息查看以及相关设置1.1开机进入到BIOS的RAID界面开机在浪潮LOGO处按”Delete”键进入到BIOS操作界面,选择”Advanced”选项,如下图:  择”AVAGOMegaRAID......
  • 浅谈PHP设计模式的状态模式
    简介:状态模式,属于行为型的设计模式。当一个对象的内在状态发生改变时,允许改变其行为,这个对象看起来像是改变了其类。适用场景:控制一个对象的状态改变过于复杂时,把状态......
  • 设计模式之美
    设计模式1.为什么要学习设计模式:应对面试中的设计模式相关问题;告别写呗别人吐槽的烂代码;提高复杂代码的设计和开发能力;让读源码、学框架事半功倍;为你的职场发展做......
  • 设计模式-状态变化-State、Memento
    状态模式上述代码缺点:如果增加一个Stat,要加很多ifelse改进方法Memento备忘录模式如果快照多了比如50次redo/需要用到一些复杂的技术,比如序列化......
  • 设计模式学习笔记
    静态工厂工厂方法可以隐藏创建产品的细节,且不一定每次都会真正创建产品,完全可以返回缓存的产品,从而提升速度并减少内存消耗。里氏替换原则返回实现接口的任意子类都可以......
  • 【Redis技术探索】「数据迁移实战」手把手教你如何实现在线+离线模式进行迁移Redis数
    从实战出发使用RedisShake进行Redis数据在线+离线模式迁移指南RedisShake基本介绍​​RedisShake​​是基于​​redis-port​​基础上进行改进的是一款开源的Redis迁移工具,......
  • 【Redis技术探索】「数据迁移实战」手把手教你如何实现在线+离线模式进行迁移Redis数
    从实战出发使用RedisShake进行Redis数据在线+离线模式迁移指南RedisShake基本介绍RedisShake是基于redis-port基础上进行改进的是一款开源的Redis迁移工具,支持Cluster......
  • mysql 半同步的模式 after_commit 与 after_sync
    参考MySQL半同步after_sync与after_commit-墨天轮(modb.pro)1.after_commit提交流程:client-->executesql-->wrtieredolog-->writebinlog-->innodbstoragecommi......
  • LVS负载均衡DR模式
    第六章LVS负载均衡DR模式​实验图​推荐步骤​网站服务器LVS服务器存储和客户端配置ip地址​在centos04配置NFS共享存储两台web服务器连接到共享存储服务器​在centos01配置......