桥接模式介绍

桥接模式介绍1 桥接模式 Bridge 模式 是指 将实现与抽象放在两个不同的类层次中 使两个层次可以独立改变 是一种结构型设计模式 2 桥接模式基于类的最小设计原则 通过使用封装 聚合及继承等行为让不同的类承担不同的职责 它的主要特点是把抽象 Abstraction 与行为实现 Implementati 分离开来 从而可以保持各部分的独立性以及应对他们的功能扩展 3 对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统 桥接模式尤为适用

一、基本介绍

  1. 桥接模式(Bridge模式)是指:将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变,是一种结构型设计模式。
  2. 桥接模式基于类的最小设计原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责。它的主要特点是把抽象(Abstraction)与行为实现(Implementation)分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展。
  3. 对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用。

二、代码案例

(1)新建品牌接口及其实现类

public interface Brand { 
    void open(); void close(); void product(); } 
public class Huawei implements Brand { 
    @Override public void open() { 
    System.out.println(" 开启华为生产线 "); } @Override public void close() { 
    System.out.println(" 关闭华为生产线 "); } @Override public void product() { 
    System.out.println(" 生产华为设备 "); } } 
public class XiaoMi implements Brand { 
    @Override public void open() { 
    // TODO Auto-generated method stub System.out.println(" 开启小米生产线 "); } @Override public void close() { 
    // TODO Auto-generated method stub System.out.println(" 关闭小米生产线 "); } @Override public void product() { 
    // TODO Auto-generated method stub System.out.println(" 生产小米设备 "); } } 

(2)新建设备抽象类及其子类

public abstract class Machine { 
    private Brand brand; public Machine(Brand brand) { 
    super(); this.brand = brand; } protected void open() { 
    this.brand.open(); } protected void close() { 
    brand.close(); } protected void product() { 
    brand.product(); } } 
public class Phone extends Machine { 
    public Phone(Brand brand) { 
    super(brand); } public void open() { 
    super.open(); System.out.println(" 手机生产线 "); } public void close() { 
    super.close(); System.out.println(" 手机生产线 "); } public void product() { 
    super.product(); System.out.println(" 手机生产线 "); } } 
public class Watch extends Machine { 
    public Watch(Brand brand) { 
    super(brand); } public void open() { 
    super.open(); System.out.println(" 手表生产线 "); } public void close() { 
    super.close(); System.out.println(" 手表生产线 "); } public void product() { 
    super.product(); System.out.println(" 手表生产线 "); } } 

(3)测试

public class Client { 
    public static void main(String[] args) { 
    Machine phone = new Phone(new XiaoMi()); phone.open(); phone.product(); phone.close(); System.out.println("======================="); Machine watch = new Watch(new Huawei()); watch.open(); watch.product(); watch.close(); System.out.println("======================="); Machine phone2 = new Phone(new Huawei()); phone2.open(); phone2.product(); phone2.close(); System.out.println("======================="); Machine watch2 = new Watch(new XiaoMi()); watch2.open(); watch2.product(); watch2.close(); } } 

三、UML类图

桥接模式UML类图

四、桥接模式小结

  • 实现了抽象和实现部分的分离,从而极大的提供了系统的灵活性,让抽象部分和实现部分独立开来,这有助于系统进行分层设计,从而产生更好的结构化系统。
  • 对于系统的高层部分,只需要知道抽象部分和实现部分的接口就可以了,其它的部分由具体业务来完成。
  • 桥接模式替代多层继承方案,可以减少子类的个数,降低系统的管理和维护成本。
  • 桥接模式的引入增加了系统的理解和设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计和编程。
  • 桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围有一定的局限性,即需要有这样的应用场景。

其他设计模式

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233817.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • POJ 1679:The Unique MST(次小生成树&&Kruskal)[通俗易懂]

    POJ 1679:The Unique MST(次小生成树&&Kruskal)

    2022年1月27日
    77
  • atitit. 解决org.hibernate.SessionException Session is closed

    atitit. 解决org.hibernate.SessionException Session is closed

    2021年11月13日
    44
  • 如何干净卸载_怎么把360卸载干净

    如何干净卸载_怎么把360卸载干净Oracle大家都知道下载简单,但是想卸载,没那么轻松,会发现自己卸载不干净,导致再次安装就会失败,现在我就一步一步演示如何彻底卸载Oracle,然后再重新安装。(本机win10)1.停止系统中所有的Oracle服务(win+r—-taskmgr—–服务)2.运行UniversalInstallera、点击应用b、卸载产品c、选择Orac…

    2022年10月21日
    3
  • 用亚马逊云建代理服务器[通俗易懂]

    用亚马逊云建代理服务器[通俗易懂]作者:Vamei出处:http://www.cnblogs.com/vamei转载请先与我联系。 我们用电脑、平板、手机等访问互联网时,本地设备和服务器之间的通信有可能因为某些不可控因素被切断。这种情况下,我们可以采用“曲线”的方式,让一个第三方的服务器来做接力,从而连接目标服务器。代理服务器可以绕过许多基于IP地址的限制。例如某视频网站只允许日本的IP访问,那么可以借助一台在日本的…

    2022年9月29日
    3
  • Android 再次探究Fragment在各种情况下的onResume与onPause

    Android 再次探究Fragment在各种情况下的onResume与onPause之前写过一篇关于Fragment真正的onResume与onPause的文章,但是当时写的比较匆忙,并不是很严谨,导致问题多多,今天抽空更新下关于fragment在各种情况下的onResume与onPause的方法,首先附一张fragment的生命周期图:1.fragment通过replace方式使用fragment在该方式中使用,使用周期基本与图上的生命周期一样,onResume与onP…

    2022年5月8日
    254
  • DOS命令Copy 合并文件

    DOS命令Copy 合并文件我们都知道DOS命令Copy的主要作用是复制文件,可是你是否知道,它还有一个作用是合并文件呢?一般情况下,它主要用于合并相同类型的文件,比如将两个文本文件合并为一个文本文件、将两个独立的MPEG视频文件合并为一个连续的视频文件等。那么,如果用它合并两个不同类型的文件,结果会怎样呢?笔者发现,巧妙地将一个文本文件合并到一个非文本文件中,可以实现隐藏秘密的作用。一起来看看吧。比如你有一段私人信息…

    2022年7月18日
    31

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号