设计模式之桥接模式

Posted vincentyw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式之桥接模式相关的知识,希望对你有一定的参考价值。

Bridge(桥接模式)

一、桥接模式简介

桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。

这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响

核心:

  • 1、将抽象部分与实现部分分离,使它们都可以独立的变化。
  • 2、处理多层继承结构,处理多维度变化的场景,将各个维度设计成独立 的继承结构,使各个维度可以独立的扩展在抽象层建立关联

二、桥接模式优缺点比较

优点:

  • 1、抽象和实现的分离
  • 2、优秀的扩展能力
  • 3、实现细节对客户透明

缺点:

  • 1、桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程

使用场景:

  • 1、OA系统消息处理    • 业务类型:普通消息、加急消息、特急消息      • 发送消息方式:系统内消息、手机短信、邮件
  • 2、奖金计算模块          • 奖金分类:个人奖金、团体奖金、激励奖金     • 部门分类:人事部门、销售部门、研发部门

注意事项:1、针对不同维度的变化,桥接模式比较合适

三、UML类图

技术图片

四、实现

   步骤1:创建品牌接口

public interface Brand {
    void  sale();
}

 步骤2:实现品牌接口的实体类对象

public class Ausu implements Brand{

    @Override
    public void  sale() {
        System.out.println( "华硕品牌");
    }

}

public class Lenovo implements Brand{

    @Override
    public void  sale() {
        System.out.println("联想品牌");
    }

}

 步骤3:创建电脑抽象类

public  abstract class Computer {
    protected Brand brand;//protected 当前类、同一包、子孙类可见 聚合另一维度的元素
    
    public Computer(Brand brand) {
        this.brand = brand;
    }
    
    public abstract void sale();    
}

 步骤4:创建继承抽象类的实体类

public class Laptop extends Computer{

    public Laptop(Brand brand) {
        super(brand);
    }

    @Override
    public void sale() {
        brand.sale();
        System.out.println("销售笔记本");
    }    
}

public class Destop extends Computer {

    public Destop(Brand brand) {
        super(brand);
    }

    @Override
    public void sale() {
        brand.sale();
        System.out.println("销售台式机");
    }

}

 步骤5:调用者测试

public class BridgeDemo01 {
    
    public static void main(String[] args) {
        Computer c1 = new Destop(new Lenovo());
        c1.sale();
        System.out.println("--------------------------------------");
        Computer c2 = new Laptop(new Ausu());
        c2.sale();
//        System.out.println("--------------------------------------");
//        Computer c3 = new Laptop(new Dell());
//        c3.sale();
    }

步骤6:运行程序,观察结果

技术图片

 

以上是关于设计模式之桥接模式的主要内容,如果未能解决你的问题,请参考以下文章

php设计模式之桥接模式实例代码

设计模式之桥接模式

设计模式之桥接模式应用例题

设计模式之桥接模式 Bridge

设计模式之桥接模式

Java二十三设计模式之-----桥接模式