一、传统方式

  1、需求分析

    现在对不同手机类型的不同品牌实现操作编程(比如:开机、关机,上网,打电话等)

    

  2、传统方式解决手机操作问题:

    传统方式解决手机使用问题(类图)

    

 

 

  3、传统方式解决手机操作问题分析

    (1)扩展性问题(类爆炸),如过再增加手机的样式(旋转式),就需要增加各个品牌手机的类,同样如果增加一个手机品牌,也要在各个手机样式类下增加;

    (2)违反了单一职责原则,当增加手机样式时,也要同时增加所有品牌的手机,这样增加了代码维护成本

二、桥接模式(Bridge Pattern)——基本介绍

  1、基本介绍

    (1)桥接模式(Bridge模式)是指:将 实现 抽象 放在两个不同的类层次中,使两个层次可以独立改变;

    (2)桥接模式是一种结构型设计模式

    (3)Bridge 模式基于 类的最小设计原则,通过使用封装、聚合及集成等行为让不同的类承担不同的职责。

        它的主要特点是把 抽象(Abstraction)行为实现(Implementation)分离开来,从而可以保持各部分的独立性以及对他们的功能扩展;

  2、桥接模式:原理类图

    

 

 

     (1)Client类:桥接模式的调用者;

    (2)抽象类(Abstraction):维护了 Implementor /即它的实现类 ConcreteImplementorA..., 二者是聚合关系,Abstraction 充电桥接类;

    (3)RefinedAbstraction:是 Abstraction 抽象类的子类;

    (4)Implementor:行为实现类的接口;

    (5)ConcreteImplementorA/B :行为的具体实现类;

    (6)从 UML 图:这里的抽象类和 接口是聚合的关系,其实 调用 和 被调用关系;

    

 

三、桥接模式实现需求

  1、桥接模式解决手机操作问题

    使用桥接模式改进传统方式,让程序须有更好的扩展性,利用程序维护

    (1)应用实例与前面一样;

    (2)使用桥接模式对应的类图

      

 

 

 

  2、代码实现

    接口端(实现端):定义行为

 1 /**
 2  * 接口
 3  */
 4 public interface Brand {
 5 
 6     void open();
 7     void close();
 8     void call();
 9 }
10 
11 --------------------------------
12 public class Xiaomi implements Brand {
13 
14     @Override
15     public void open() {
16         System.out.println("小米手机开机");
17     }
18 
19     @Override
20     public void close() {
21         System.out.println("小米手机关机");
22     }
23 
24     @Override
25     public void call() {
26         System.out.println("小米手机打电话");
27     }
28 }
29 --------------------------------
30 public class Vivo implements Brand{
31     @Override
32     public void open() {
33         System.out.println("Vivo手机开机");
34     }
35 
36     @Override
37     public void close() {
38         System.out.println("Vivo手机关机");
39     }
40 
41     @Override
42     public void call() {
43         System.out.println("Vivo手机打电话");
44     }
45 }

 

 

    抽象端(抽象类端):

 1 public abstract class Phone {
 2 
 3     //组合品牌
 4     private Brand brand;
 5 
 6     //构造器
 7     public Phone(Brand brand) {
 8         super();
 9         this.brand = brand;
10     }
11     public Phone() {
12         super();
13     }
14 
15     protected void open() {
16         this.brand.open();
17     }
18 
19     protected void close() {
20         this.brand.close();
21     }
22 
23     protected void call() {
24         this.brand.call();
25     }
26 }
27 -----------------------------------------
28 public class FoldedPhone extends Phone{
29 
30     public FoldedPhone(Brand brand) {
31         super(brand);
32     }
33 
34     @Override
35     public void open() {
36         super.open();
37         System.out.println("折叠样式手机");
38     }
39 
40 
41     @Override
42     public void close() {
43         super.close();
44         System.out.println("折叠样式手机");
45     }
46 
47 
48     @Override
49     public void call() {
50         super.call();
51         System.out.println("折叠样式手机");
52     }
53 }
54 -----------------------------------------
55 public class UpRighPhone extends Phone {
56 
57     public UpRighPhone(Brand brand) {
58         super(brand);
59     }
60 
61     @Override
62     public void open() {
63         super.open();
64         System.out.println("直立样式手机");
65     }
66 
67 
68     @Override
69     public void close() {
70         super.close();
71         System.out.println("直立样式手机");
72     }
73 
74 
75     @Override
76     public void call() {
77         super.call();
78         System.out.println("直立样式手机");
79     }
80 }

 

  

    客户端:

 1 public class Client {
 2 
 3     public static void main(String[] args) {
 4         FoldedPhone foldedPhone = new FoldedPhone(new Xiaomi());
 5         foldedPhone.open();
 6         foldedPhone.close();
 7         foldedPhone.call();
 8 
 9         System.out.println("-----------------------");
10         FoldedPhone foldedPhone1 = new FoldedPhone(new Vivo());
11         foldedPhone1.open();
12         foldedPhone1.close();
13         foldedPhone1.call();
14 
15         System.out.println("---------------------");
16         UpRighPhone upRighPhone = new UpRighPhone(new Xiaomi());
17         upRighPhone.open();
18         upRighPhone.close();
19         upRighPhone.call();
20 
21         System.out.println("---------------------");
22         UpRighPhone upRighPhone1 = new UpRighPhone(new Vivo());
23         upRighPhone1.open();
24         upRighPhone1.close();
25         upRighPhone1.call();
26     }
27 }

 

 

 

 

posted on 2021-01-19 22:28  格物致知_Tony  阅读(179)  评论(0编辑  收藏  举报