标签:桥接 void 第一节 模式 System println close public out
一、传统方式
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 }
标签:桥接,void,第一节,模式,System,println,close,public,out 来源: https://www.cnblogs.com/niujifei/p/14300466.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。