设计模式(七)桥接模式

  核心要点:处理多层继承结构,处理多维度变化的场景,将各个维度设计成独立的继承结构,使各个维度可以独立的扩展在抽象层建立关联。

  桥接模式可以取代多层继承的方案。多层继承违背了单一职责原则,复用性较差,类的个数也非常多。桥接模式可以极大的减少子类的个数,从而降低管理和维护的成本。

  桥接模式极大的提高了系统可扩展性,在两个变化维度中任意扩展一个维度,都不需要修改原有的系统,符合开闭原则。

 

如上图所示,用多层继承结构可以实现,但会出现扩展性问题以及违反单一职责原则(一个类,有两个引起这个类变化的原因)

如上图 运用桥接模式

1. 创建一个品牌Brand接口,并创建两个类实现该接口

 1 package com.ztq.bridge;
 2 
 3 /***
 4  * 品牌
 5  * @author ZTQ
 6  *
 7  */
 8 public interface Brand {
 9     void sale();
10 }
11 
12 class Lenovo implements Brand{
13 
14     @Override
15     public void sale() {
16         System.out.println("销售联想电脑");
17     }
18     
19 }
20 
21 class Dell implements Brand{
22 
23     @Override
24     public void sale() {
25         System.out.println("销售戴尔电脑");
26     }
27     
28 }

2. 创建机型Computer类,并创建子类

 1 package com.ztq.bridge;
 2 
 3 /***
 4  * 电脑类型的维度
 5  * @author ZTQ
 6  *
 7  */
 8 public class Computer{
 9     protected Brand brand;
10 
11     public Computer(Brand brand) {
12         this.brand = brand;
13     }
14 
15     public void sale(){
16         brand.sale();
17     }
18     
19 }
20 
21 class Desktop extends Computer{
22 
23     public Desktop(Brand brand) {
24         super(brand);
25     }
26     
27     public void sale(){
28         super.sale();
29         System.out.println("销售台式机");
30     }
31     
32 }
33 
34 class Laptop extends Computer{
35 
36     public Laptop(Brand brand) {
37         super(brand);
38     }
39     
40     public void sale(){
41         super.sale();
42         System.out.println("销售笔记本");
43     }
44     
45 }

3.  测试类Client

 1 package com.ztq.bridge;
 2 
 3 public class Client {
 4     public static void main(String[] args) {
 5         //销售联想笔记本
 6         Computer c = new Laptop(new Lenovo());
 7         c.sale();
 8         
 9         //销售戴尔台式机
10         Computer c2 = new Desktop(new Dell());
11         c2.sale();
12     }
13 }

结果

销售联想电脑
销售笔记本
销售戴尔电脑
销售台式机

桥接模式实际开发中应用场景

——JDBC驱动程序

——AWT中的Peer架构

——银行日志管理:

  格式分类:操作日志、交易日志、异常日志

  距离分类:本地记录日志、异地记录日志

——人力资源系统中的奖金计算模块:

  奖金分类:个人奖金、团队奖金、激励奖金

  部门分类:人事部门、销售部门、研发部门

——OA系统中的消息处理:

  业务类型:普通消息、加急消息、特急消息

  发送消息方式:系统内消息、手机短信、邮件

原文地址:https://www.cnblogs.com/zhangtianq/p/6075822.html