桥接模式 快来打我* 2021-11-05 21:46 340阅读 0赞 桥接模式,有些类似排列组合,下面先引用一个非常经典的例子来理解桥接模式。假如某位画画爱好者去买画笔,他需要大、中、小三种型号且具有6种颜色的画笔,如果买彩笔,他需要买3×6=18枝;如果买水彩,他需要3枝笔和6种水彩颜料。如果将它们看做是程序世界里的对象的话,第一种方案需要3×6=18个对象;而第二种方案需要3+6=9个对象。如果增加一种颜色,第一种方案需要增加大、中、小三种型号的画笔,即增加3个对象;而第二种方案只需要增加一种水彩颜料,即增加1个对象,即可完成。为什么会出现这种现象?原因在于第一种方案将颜色和型号两个不同的变化维度耦合在一起,只要其中一个发生变化,就会影响另一个;而第二种方案,将型号与颜色进行分离,使得其中一方改变不能影响另一方,即将型号与颜色进行解耦 **桥接模式(Bridge Pattern):**将抽象部分与其实现部分分离,使它们都可以独立变化。又称为**柄体模式(Handle and Body Pattern)**或**接口模式(Interface Pattern)**。是一种对象结构型模式 桥接模式通过抽象关联代替传统的多层继承,用动态的对象组合关系取代类之间的静态继承关系,从而更有效的控制了系统中类的个数,使系统更加灵活、易于扩展 实现桥接模式,至少要4个角色 抽象类(Abstraction):定义抽象类的接口,一般为抽象类,其中定义了一个实现类接口(Implementor)类型的对象,且与该对象具有关联关系 扩充抽象类(RefinedAbstraction):在系统中可能不止一个,扩充由抽象类(Abstraction)定义的接口。一般情况下不是抽象类而是具体类 实现类接口(Implementor):定义实现类接口 具体实现类(ConcreteImplementor):在系统中可能不止一个,具体实现实现类接口(Implementor) 下面代码演示桥接模式 实现类接口 Implementor package com.design.structural.bridge; /** * 实现类接口 */ public interface Implementor { void operationImpl(); } 定义具体实现类 ConcreteImplementorA package com.design.structural.bridge; /** * 具体实现类A */ public class ConcreteImplementorA implements Implementor{ @Override public void operationImpl() { System.out.println("具体实现类A"); } } 定义具体实现类 ConcreteImplementorB package com.design.structural.bridge; /** * 具体实现类B */ public class ConcreteImplementorB implements Implementor{ @Override public void operationImpl() { System.out.println("具体实现类B"); } } 定义抽象类Abstraction package com.design.structural.bridge; /** * 抽象类 */ public abstract class Abstraction { protected Implementor implementor; public Abstraction(Implementor implementor){ this.implementor = implementor; } public abstract void operationImpl(); } 扩充抽象类 RefinedAbstractionA package com.design.structural.bridge; /** * 扩充抽象类A */ public class RefinedAbstractionA extends Abstraction{ public RefinedAbstractionA(Implementor implementor) { super(implementor); } @Override public void operationImpl() { System.out.println("扩展抽象类A"); implementor.operationImpl(); } } 扩充抽象类 RefinedAbstractionB package com.design.structural.bridge; /** * 扩充抽象类B */ public class RefinedAbstractionB extends Abstraction{ public RefinedAbstractionB(Implementor implementor) { super(implementor); } @Override public void operationImpl() { System.out.println("扩展抽象类B"); implementor.operationImpl(); } } 类图如下 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dzanp6Y2Jx_size_16_color_FFFFFF_t_70][] 测试调用 package com.design.structural.bridge; /** * 桥接模式 */ public class TestNMain { public static void main(String[] args) { RefinedAbstractionA rAA = new RefinedAbstractionA(new ConcreteImplementorA()); rAA.operationImpl(); System.out.println(" "); RefinedAbstractionA rAB = new RefinedAbstractionA(new ConcreteImplementorB()); rAB.operationImpl(); System.out.println(" "); RefinedAbstractionB rBA = new RefinedAbstractionB(new ConcreteImplementorA()); rBA.operationImpl(); System.out.println(" "); RefinedAbstractionB rBB = new RefinedAbstractionB(new ConcreteImplementorB()); rBB.operationImpl(); } } 结果如下图 ![2019080911375210.png][] 从结果可以看出实现了扩展抽象类与具体实现类的组合,如果其中一方增加需求,只需要继承 Abstraction 抽象类或实现 Implementor 接口即可 **桥接模式总结** 优点:对抽象接口及其实现部分进行分离;提高系统可扩展性;符合开闭原则 缺点:增加对系统的理解和设计难度;要求正确识别出系统中两个独立变化的维度 适用场景:需要在抽象类和具体类之间增加更多灵活性;类中存在多个独立变化的维度,且这些维度都需要独立进行扩展;不希望使用多层继承导致系统类的个数急剧增加 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dzanp6Y2Jx_size_16_color_FFFFFF_t_70]: /images/20211104/31ec3765682744b7941d70ba6591e4f0.png [2019080911375210.png]: /images/20211104/2ab2088710454e299fe65ab83e734b7e.png
相关 桥接模式 > 本文总结摘自刘伟老师的《设计模式》和程杰老师的《大话设计模式》 1.定义 桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立地变化。(桥接模式用关联关系来降低 ╰半橙微兮°/ 2022年01月27日 09:37/ 0 赞/ 205 阅读
相关 桥接模式 桥接模式,有些类似排列组合,下面先引用一个非常经典的例子来理解桥接模式。假如某位画画爱好者去买画笔,他需要大、中、小三种型号且具有6种颜色的画笔,如果买彩笔,他需要买3×6=1 快来打我*/ 2021年11月05日 21:46/ 0 赞/ 341 阅读
相关 桥接模式 桥接模式 桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦 本是古典 何须时尚/ 2021年09月29日 16:06/ 0 赞/ 328 阅读
相关 桥接模式 A1 A2 与 B1 B2 组合 通常情况下 定义A接口或抽象类,A1 A2实现或继承A,然后A1B1和A1B2继承A1,A2B1和A2B2继承A2,各自输出。这样做关联关 超、凢脫俗/ 2021年09月28日 06:58/ 0 赞/ 303 阅读
相关 桥接模式 1.桥 public interface Bridge { void tagetLand(); } 桥的实现 publ 怼烎@/ 2021年09月21日 00:50/ 0 赞/ 333 阅读
相关 桥接模式 桥接模式:是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。 这种模式涉及到一个作 我会带着你远行/ 2021年09月17日 03:34/ 0 赞/ 329 阅读
相关 桥接模式 10.桥接模式 ![70][] class Client { static void Main(string[] arg ╰+攻爆jí腚メ/ 2021年09月16日 23:56/ 0 赞/ 305 阅读
相关 桥接模式 一 概述 现在有一个需求,需要创建不同的图形,并且每个图形都有可能会有不同的颜色。我们可以利用继承的方式来设计类的关系: ![在这里插入图片描述][watermark £神魔★判官ぃ/ 2021年07月24日 20:06/ 0 赞/ 458 阅读
相关 桥接模式 一、概述 一般问题:一个类需要在两个以上维度扩展,采用继承方式会导致子类数量过多 核心方案:将抽象部分与实现部分分离,使其都可以独立变化 设计意图:桥接模式不是将两个 ゞ 浴缸里的玫瑰/ 2021年05月18日 20:36/ 0 赞/ 397 阅读
相关 桥接模式 接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。 这种模... 小灰灰/ 2020年06月13日 05:52/ 0 赞/ 708 阅读
还没有评论,来说两句吧...