首页 > 其他分享 >桥接设计模式 (Bridge)

桥接设计模式 (Bridge)

时间:2023-12-30 10:37:01浏览次数:36  
标签:Bridge kind 25 桥接 make Kind 抽象化 设计模式 public


1. 问题引出

实现某件产品,某产品有多种品牌(brand)和类型(kind)。

桥接设计模式 (Bridge)_ide


比较直观的一种实现方式,多重继承如下图所示,多重继承的两大缺点:

  • 会导致有过多的类(类的数量=品牌数量*类型数量);
  • 新增品牌则需要新增所有的类型类,新增类型则需要新增所有的品牌类,违反了单一职责原则(单一职责原则:对类来说的,即一个类应该只负责一项职责。如类 A 负责两个不同职责:职责 1,职责 2。当职责 1 需求变更 而改变 A 时,可能造成职责 2 执行错误,所以需要将类 A 的粒度分解为 A1,A2)。

2. 桥接模式解决问题

桥接模式中有4个角色:抽象化(Abstraction),改善后的抽象化(RefinedAbstraction),实现者(Implementor),具体实现者(ConcreteImplementor)。

  • 抽象化:类的功能层次结构最上层。
  • 改善后的抽象化:在抽象化角色基础上增加了新功能的角色。
  • 实现者:定义了用于实现抽象化角色的接口的方法。
  • 具体实现者:负责实现实现者角色中定义的方法。

Product 的角色是抽象化,抽象化的实现 Brand1、Brand2、Brand3,实现者 Kind,具体的实现者 Kind1、Kind2、Kind3。

显然使用桥接模式解决了上述的两个缺点。

桥接设计模式 (Bridge)_java_02

3. 代码示例

Product.java, 抽象化角色 :

/**
 * 抽象化角色:类的功能层次结构最上层
 * @author syrdbt
 * @date 2020-02-25
 */
public abstract class Product {
    private Kind kind;

    public Product(Kind kind) {
        this.kind = kind;
    }

    public void make() {
        kind.make();
    }
}

Brand1.java:

/**
 * 改善后的抽象化角色
 * @author syrdbt
 * @date 2020-02-25
 */
public class Brand1 extends Product {

    public Brand1(Kind kind) {
        super(kind);
    }

    @Override
    public void make() {
        System.out.println("这个产品属于 Brand1");
        super.make();
    }
}

Brand2.java:

/**
 * 改善后的抽象化角色
 * @author syrdbt
 * @date 2020-02-25
 */
public class Brand2 extends Product {

    public Brand2(Kind kind) {
        super(kind);
    }

    @Override
    public void make() {
        System.out.println("这个产品属于 Brand2");
        super.make();
    }
}

Brand3.java:

/**
 * 改善后的抽象化角色
 * @author syrdbt
 * @date 2020-02-25
 */
public class Brand3 extends Product {

    public Brand3(Kind kind) {
        super(kind);
    }

    @Override
    public void make() {
        System.out.println("这个产品属于 Brand3");
        super.make();
    }
}

Kind.java

/**
 * 实现者角色
 * @author syrdbt
 * @date 2020-02-25
 */
public interface Kind {
    void make();
}

Kind1.java

/**
 * 具体的实现者
 * @author syrdbt
 * @date 2020-02-25
 */
public class Kind1 implements Kind {

    @Override
    public void make() {
        System.out.println("制作 Kind1 类型的产品");
    }

}

Kind2.java:

/**
 * 具体的实现者
 * @author syrdbt
 * @date 2020-02-25
 */
public class Kind2 implements Kind{
    @Override
    public void make() {
        System.out.println("制作 Kind1 类型的产品");
    }
}

Kind3.java:

/**
 * 具体的实现者
 * @author syrdbt
 * @date 2020-02-25
 */
public class Kind3 implements Kind {
    @Override
    public void make() {
        System.out.println("制作 Kind3 类型的产品");
    }
}

测试类,BridgeMain.java:

/**
 * 测试类
 * @author syrdbt
 * @date 2020-02-25
 */
public class BridgeMain {
    public static void main(String[] args) {
        Product product = new Brand1(new Kind1());
        product.make();
    }
}

运行截图:

桥接设计模式 (Bridge)_java_03

参考文献

  • 图解设计模式 结城浩
  • 图解设计模式 尚硅谷


标签:Bridge,kind,25,桥接,make,Kind,抽象化,设计模式,public
From: https://blog.51cto.com/xuxiangyang/9038455

相关文章

  • 23.page object 设计模式
    目录 pageobject模式简介pageobject设计原则pageobject模式简介 马丁福勒个人博客selenium官网传统UI自动化的问题无法适应UI频繁变化无法清晰表达业务用例场景大量的样板代码driver/find/clickPOM模式的优势降低UI变......
  • js设计模式之工厂模式
    原型链实现letUserFactory=function(role){if(thisinstanceofUserFactory){lets=newthis[role]returns}else{returnnewUserFactory(role)}}UserFactory.prototype={SumperAdmin:function(){this.name="......
  • 设计模式对比
     代理、桥接、装饰器、适配器4种设计模式的区别代理、桥接、装饰器、适配器,这4种模式是比较常用的结构型设计模式。它们的代码结构非常相似。笼统来说,它们都可以称为Wrapper模式,也就是通过Wrapper类二次封装原始类。尽管代码结构相似,但这4种设计模式的用意完全不同,也就是说要......
  • .Net 几种常用设计模式【工厂、单例】
    抽象工厂模式//抽象产品publicinterfaceIProduct{voidOperation();}//具体产品ApublicclassProductA:IProduct{publicvoidOperation(){Console.WriteLine("ProductAOperation");}}//具体产品BpublicclassProductB:IPr......
  • 享元设计模式 和 享元设计模式在 FastDateFormat类中的应用
    1.概述享元设计模式(FlyweightPattern):通过尽量共享实例来避免new出实例。享元设计模式中有两个角色,一是要共享的实例,二是获取或创建这些共享实例的工厂。举一个例子:例如String常量池,大家创建的String常量,创建String的时候,先去常量池中看一下,有该String常量直接使用该常量,如果没......
  • GOF23--23种设计模式(三)
    一.桥接模式Java中的桥接模式(BridgePattern)是一种结构性设计模式,它将抽象部分和实现部分分离,使它们可以独立变化,同时通过桥接对象将它们连接起来。这种模式将抽象与其实现解耦,使得抽象和实现可以独立变化。抽象和它的实现通过一个桥接类进行连接,使得它们可以各自独立地变化。......
  • Composite 组合模式简介与 C# 示例【结构型3】【设计模式来了_8】
    Composite组合模式简介与C#示例【结构型3】【设计模式来了_8】 阅读目录〇、简介1、什么是组合设计模式?2、优缺点和适用场景一、简单的代码示例二、根据示例代码看结构三、相关模式回到顶部〇、简介1、什么是组合设计模式?一句话解释:  针对树形结构......
  • Facade 外观模式简介与 C# 示例【结构型5】【设计模式来了_10】
    Facade外观模式简介与C#示例【结构型5】【设计模式来了_10】 阅读目录〇、简介1、什么是外观模式?2、外观模式的优缺点和适用场景一、外观模式的代码实现二、结构三、相关模式回到顶部〇、简介1、什么是外观模式?一句话解释:  将一系列需要一起进行的......
  • Builder 生成器模式简介与 C# 示例【创建型2】【设计模式来了_2】
    Builder生成器模式简介与C#示例【创建型2】【设计模式来了_2】 阅读目录〇、简介1、什么是生成器模式?2、优缺点和使用场景一、简单的示例代码二、生成器模式结构三、在.Net框架中的实际应用四、相关模式回到顶部〇、简介1、什么是生成器模式?一句话......
  • Decorator 装饰者模式简介与 C# 示例【结构型4】【设计模式来了_9】
    Decorator装饰者模式简介与C#示例【结构型4】【设计模式来了_9】 阅读目录〇、简介1、什么是装饰者模式2、优缺点和适用场景一、通过示例代码简单实现二、装饰者模式的结构三、相关模式回到顶部〇、简介1、什么是装饰者模式一句话解释:  通过继承统......