桥接模式-处理多维度变化

这篇具有很好参考价值的文章主要介绍了桥接模式-处理多维度变化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 程序员小名去摆摊卖奶茶了,口味有香、甜。 型号有大、中、小。假如小名先在家里把这些奶茶装好,那么最少要装2x3 = 6杯奶茶,如果此时新增一个口味:酸,那么就需要多装3杯奶茶了。而且这样做,等客户买走一种,比如 甜+大杯后,这种型号就没有了,这样扩展性不太行哦。

换种方案:摆摊的时候只要带两样东西:1)不同口味的饮料;2)不同型号的杯子。 那么就可以不要先再家装好,客户想买什么,临时装好就行了,而且就算新增一个口味,那么也只是多准备一种饮料而已,而不是要增加三种类型。

第二种方案就算本文讲的桥接模式,“客户点奶茶口味及型号,小名临时装”的这个动作就是“桥”,将口味与杯子型号连接起来。

1 桥接模式概述

如果软件系统种某个类存在两个或以上变化的维度,通过该模式可以将这些维度分离处理,使两者可以独立扩展,让系统更加符合单一职责原则。将独立的维度设计为不同的继承等级接口,并在抽象层建立一个抽象关联,该关联类似一条连接这些独立继承结构的桥。

桥接模式-处理多维度变化,设计模式的艺术,桥接模式

图 桥接模式结构图

Abstraction,抽象类,一般是抽象类而不是接口,既可包含抽象业务方法,也可以包含具体业务方法。做更多、更复杂的操作。定义了一个Implementor类型的对象并可维护该对象。

RefinedAbstraction,扩充抽象类,实现了在Abstraction中声名的抽象业务方法。可以调用在Implementor中定义的业务方法。

Implementor,实现类接口,接口不一定要与Abstraction的接口完全一致,仅提供基本操作。

ConcreteImplementor,具体实现类,实现Implementor基本操作接口。

public abstract class MilkTeaAbstraction {

    protected CupImplementor cupImplementor;

    public MilkTeaAbstraction(CupImplementor cupImplementor) {
        this.cupImplementor = cupImplementor;
    }

    public abstract void taste(); //口味

}

public class FragrantMilkTea extends MilkTeaAbstraction{

    public FragrantMilkTea(CupImplementor cupImplementor) {
        super(cupImplementor);
    }

    @Override
    public void taste() {
        System.out.println("香 " + cupImplementor.model() + ";");
    }
}

public class AcidMilkTea extends MilkTeaAbstraction{

    public AcidMilkTea(CupImplementor cupImplementor) {
        super(cupImplementor);
    }

    @Override
    public void taste() {
        System.out.println("酸 " + cupImplementor.model() + ";");
    }
}

public interface CupImplementor {

    String model(); //型号

}

public class BigCupImplementor implements CupImplementor{
    @Override
    public String model() {
        return "大杯";
    }
}

public class SmallCupImplement implements CupImplementor{
    @Override
    public String model() {
        return "小杯";
    }
}

public class Client {

    public static void main(String[] args) {
        CupImplementor cupImplementor = new BigCupImplementor();
        MilkTeaAbstraction milkTeaAbstraction = new FragrantMilkTea(cupImplementor);
        milkTeaAbstraction.taste();
//        运行结果:
//        香 大杯;
    }

}

2 优缺点

优点:

  1. 用“对象间的关联关系”解耦抽象和实现之间固有的绑定关系,使得抽象和实现可沿着各自的维度来变化。即抽象和实现不再在同一个继承层次结构中。
  2. 提供了系统的可扩展性,在两个维度中任意扩展一个维度,都不需要修改原有系统,符合开闭原则。

缺点:文章来源地址https://www.toymoban.com/news/detail-604415.html

  1. 增加系统的理解和设计难度,要求开发者一开始就针对抽象层进行设计与编程。
  2. 要求正确识别出系统中两个独立变化的维度,如果识别这两个维度也需要一定的经验积累。

3 适用场景

  1. 一个类存在两个(或多个)独立变化的维度,且这些维度都需要独立进行扩展。
  2. 不希望使用继承或因为多层继承导致系统类的个数急剧增加的系统。

到了这里,关于桥接模式-处理多维度变化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • AIGC ChatGPT 实现动态多维度分析雷达图制作

    雷达图在多维度分析中是一种非常实用的可视化工具,主要有以下优势: 易于理解: 雷达图使用多边形或者圆形的形式展示多维度的数据,直观易于理解。 多维度对比: 雷达图可以在同一张图上比较多个项目或者实体在多个维度上的表现。 数据关系明显: 通过雷达图,可

    2024年02月11日
    浏览(46)
  • 异构区块链的多维度安全检测方案

    摘 要 :异构区块链多维度安全检测方案可以为多样化的区块链平台安全性检测提供统一的测评标准和检测方法,辅助相关部门对区块链平台进行有效检测和监管,促进区块链行业的合规发展。通过分析现有区块链安全检测的需求,针对目前多样性的区块链底层平台,提出普

    2024年02月05日
    浏览(40)
  • 多维度聊一聊 k8s 和 openstack

    k8s 和 openstack 无疑是当今云计算领域的两大巨头,它们分别占据着 IaaS 和 PaaS 领域的事实标准,经常被拿来一起比较。我记得大概在三四年前 k8s 如火如荼的发展的时候,“openstack 已死”,“openstack 没落了”之类的文章层出不穷。但是这么年过去了 openstack 老当益壮依然在云

    2024年01月22日
    浏览(45)
  • 笔记:对多维torch进行任意维度的多“行”操作

    新建torch 取出某一行 取出某一列 一次性取出多行 取出连续的多行 ——有多种操作方式 取出不连续的多行 如:取出第0行和第2行 一次取出多列 取出连续的多列 ——同样拥有多种方案 取出不连续的多列 如取出第0列和第3列 此三维torch可视化如下: 取出三维torch的任意两行(

    2024年02月01日
    浏览(73)
  • Matlab 线性拟合、一维、多维度非线性拟合、多项式拟合

      线性拟合 我随便设定一个函数然后通过解方程计算出对应的系数 假设我的函数原型是 y=a*sin(0.1*x.^2+x)+b* squre(x+1)+c*x+d  拟合系数:   利用matlab实现非线性拟合(三维、高维、参数方程)_matlab多元非线性拟合_hyhhyh21的博客-CSDN博客 简单的一维的拟合: 思路: 将非线性-》线

    2024年02月12日
    浏览(46)
  • 《扬帆优配》两融业务不乏亮点 仍需多维度补短板

    受多重因素影响,2022年证券职业全体成绩承压。不过,到3月29日晚记者发稿时,从已发表的7家上市券商2022年年报来看,券商在两融事务方面不乏亮点。   受访业内人士表明,两融事务的开展不仅丰厚了券商的收入,也促进了券商其他事务的开展。可是,两融事务开展中存在

    2024年02月02日
    浏览(41)
  • 抛开价格,DBeaver真的比Navicat好用吗?多维度测评来了!!!

    今天看到一个很有意思的话题“抛开价格,DBeaver真的比Navicat好用吗?” ,正好自己最近使用的数据库连接工具比较多,两个软件都有使用过,我以自己的使用体验给你对比一下,从这个方面去对比: 1、下载难易 DBeaver是个开源软件,比较容易利用现有的网络资源找到安装包。

    2024年02月16日
    浏览(43)
  • Java开发 - 不知道算不算详细的MySQL多维度性能优化剖析

    MySQL性能优化是一个很大的话题,小到一句SQL,大到一个系统,都是我们优化的目标,博主之前曾写过一篇关于SQL优化的博客,感兴趣的小伙伴直接点击即可。本篇,我们将从多个维度来讲解MYSQL性能优化相关的内容,读完此篇,你将初步了解有哪些MySQL的优化策略,以及怎么

    2024年02月06日
    浏览(36)
  • C语言--getchar()函数超详细解析(多维度分析,小白一看就懂!!!)

    目录 一、前言 二、什么是getchar()函数 三、getchar()函数的返回类型与机制  四、连续单个字符串 (代码演示)  五、getchar()函数其他用法,实战演练(重点) (1)按照题目写出理想代码,but  出现了不理想的效果  (2)原因分析(原理详解) (3)解决方法  (4)再次练手

    2024年02月06日
    浏览(49)
  • 腾讯云服务器ping不通解决方法(公网IP/安全组/系统多维度)

    腾讯云服务器ping不通什么原因?ping不通公网IP地址还是域名?新手站长从云服务器公网IP、安全组、Linux系统和Windows操作系统多方面来详细说明腾讯云服务器ping不通的解决方法: 目录 腾讯云服务器ping不通原因分析及解决方法 安全组ICMP协议放通Ping服务 云服务器公网IP地址

    2024年02月08日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包