桥接模式介绍

桥接模式介绍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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Iocomp VC2017 – 5.12版本Crack

    Iocomp VC2017 – 5.12版本CrackIocomp工业仪表盘控件包(.net版)包括多种用来创建专业的仪表和测量、工业控制、工业监控等相关的应用程序的控件包,包括仪表盘控件,开关控件,实时曲线控件,LED灯控件等等。所有的控件均为100%托管代码,Ω578867473知道支持Microsoft/Borland/CodeGear/Embarcadero等不同的开发环境。包括三个不同的版本,终极版(ultimate),专业版(ProPack)和曲线版(PlotPack.)控件包中的所有控件都是面向对象的设计,并.

    2022年7月25日
    13
  • 开源服务器监控工具——zabbix(二)[通俗易懂]

    开源服务器监控工具——zabbix(二)[通俗易懂]基本知识及安装操作见:开源服务器监控工具——zabbix(一)使用脚本操作zabbix我们可以利用脚本来对zabbix进行操作,可以使用脚本进行登陆zabbix,发现、删除和创建要监控的主机,我们需要将要执行的操作写入脚本中。登陆mkdir/zabbixcd/zabbixvimzabbix-api.sh写入:curl-s-XPOST-H’Content-Type:a…

    2022年5月1日
    39
  • MySQL截取字符串的方法-substring_index

    MySQL截取字符串的方法-substring_indexsubstring_index的用法substring_index(str,delim,count)str:要处理的字符串delim:分隔符count:计数(要截取的位置,正数为从左向右,负数为从右向左)工作中遇到的案例:排查生产问题的时候,需要从类似下面的日志中取出一个orderId这个字段对应的数字customer_id=87380–>customer_id有最新跟进的订单,orderId=293976–>ENDSQL语句:selectsubstring_ind

    2022年5月16日
    41
  • java经典实例 源代码_100个Java经典编程实例源代码JAVA源码下载

    java经典实例 源代码_100个Java经典编程实例源代码JAVA源码下载100个Java经典编程实例源代码(2folders,2files,1.38KB,25.13MBintotal.)java运用编程100例(二)例57-100(45folders,2files,1.38KB,17.04MBintotal.)实例100(1folders,4files,1.64KB,1.31MB…

    2022年7月7日
    23
  • CDMA是什么网络类型_WCDMA

    CDMA是什么网络类型_WCDMAGSM,中文翻译作全球移动通信系统,是目前世界上应用最广泛的第二代移动通信制式(2G),目前联通和移动的2G网络都运营这个制式。WCDMA,中文翻译作宽带码分多址,是由GSM阵营发展而来,也是目前全球应用最广泛、支持的机型最多、网速最快的第三代移动通信制式(3G),目前联通的3G网络采用这个制式。HSDPA,中文翻译作高速下行分组接入技术,和HSUPA并称HSPA技术,HSDPA强化了WCDMA

    2022年10月3日
    4
  • 解决Sublime Text 3在GBK编码下的中文乱码问题听语音

    解决Sublime Text 3在GBK编码下的中文乱码问题听语音

    2021年9月24日
    55

发表回复

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

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