设计模式之桥接模式
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:运行程序,观察结果
以上是关于设计模式之桥接模式的主要内容,如果未能解决你的问题,请参考以下文章