博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java设计模式--结构型模式--桥接模式
阅读量:6161 次
发布时间:2019-06-21

本文共 2820 字,大约阅读时间需要 9 分钟。

1                                     桥接模式 2  概述 3     将抽象部分与它的实现部分分离,使它们都可以独立地变化。 4   5   6  适用性 7     1.你不希望在抽象和它的实现部分之间有一个固定的绑定关系。 8       例如这种情况可能是因为,在程序运行时刻实现部分应可以被选择或者切换。 9 10     2.类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。11       这时Bridge模式使你可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充。12 13     3.对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译。14 15     4.正如在意图一节的第一个类图中所示的那样,有许多类要生成。16       这样一种类层次结构说明你必须将一个对象分解成两个部分。17 18     5.你想在多个对象间共享实现(可能使用引用计数),但同时要求客户并不知道这一点。19  20  21  参与者22     1.Abstraction23       定义抽象类的接口。24       维护一个指向Implementor类型对象的指针。25 26     2.RefinedAbstraction27       扩充由Abstraction定义的接口。28 29     3.Implementor30       定义实现类的接口,该接口不一定要与Abstraction的接口完全一致。31       事实上这两个接口可以完全不同。32       一般来讲,Implementor接口仅提供基本操作,而Abstraction则定义了基于这些基本操作的较高层次的操作。33 34     4.ConcreteImplementor35       实现Implementor接口并定义它的具体实现。

 

测试类:

1 public class Test { 2  3     public static void main(String[] args) { 4          5         Person man = new Man(); 6          7         Person lady = new Lady(); 8          9         Clothing jacket = new Jacket();10         11         Clothing trouser = new Trouser();12         13         jacket.personDressCloth(man);14         trouser.personDressCloth(man);15 16         jacket.personDressCloth(lady);17         trouser.personDressCloth(lady);18     }19 }

 

1 public abstract class Person { 2  3     private Clothing clothing; 4      5     private String type; 6  7     public Clothing getClothing() { 8         return clothing; 9     }10 11     public void setClothing() {12         this.clothing = ClothingFactory.getClothing();13     }14     15     public void setType(String type) {16         this.type = type;17     }18     19     public String getType() {20         return this.type;21     }22     23     public abstract void dress();24 }

 

1 public abstract class Clothing {2 3     public abstract void personDressCloth(Person person);4 }

 

1 public class Lady extends Person { 2  3     public Lady() { 4         setType("女人"); 5     } 6      7     public void dress() { 8         Clothing clothing = getClothing(); 9         clothing.personDressCloth(this);10     }11 }

 

1 public abstract class Clothing {2 3     public abstract void personDressCloth(Person person);4 }

 

1 public class Jacket extends Clothing {2 3     public void personDressCloth(Person person) {4         System.out.println(person.getType() + "穿马甲");5     }6 }

 

1 @SuppressWarnings("static-access") 2 public class ClothingFactory { 3     private static Clothing clothing; 4      5     public ClothingFactory(Clothing clothing){ 6         this.clothing = clothing; 7     } 8      9     public static Clothing getClothing() { 10         return clothing;11     }12 13 }

 

1 public class Trouser extends Clothing {2 3     public void personDressCloth(Person person) {4         System.out.println(person.getType() + "穿裤子");5     }6 }

 

转载地址:http://bfafa.baihongyu.com/

你可能感兴趣的文章
向上扩展型SSD 将可满足向外扩展需求
查看>>
虚机不能启动的特例思考
查看>>
SQL Server编程系列(1):SMO介绍
查看>>
在VMware网络测试“专用VLAN”功能
查看>>
使用Formik轻松开发更高质量的React表单(三)<Formik />解析
查看>>
也问腾讯:你把用户放在什么位置?
查看>>
CSS Sprites 样式生成工具(bg2css)
查看>>
[转]如何重构代码--重构计划
查看>>
类中如何对list泛型做访问器??
查看>>
C++解析XML--使用CMarkup类解析XML
查看>>
P2P应用层组播
查看>>
Sharepoint学习笔记—修改SharePoint的Timeouts (Execution Timeout)
查看>>
CSS引入的方式有哪些? link和@import的区别?
查看>>
Redis 介绍2——常见基本类型
查看>>
asp.net开发mysql注意事项
查看>>
(转)Cortex-M3 (NXP LPC1788)之EEPROM存储器
查看>>
ubuntu set defult jdk
查看>>
[译]ECMAScript.next:TC39 2012年9月会议总结
查看>>
【Xcode】编辑与调试
查看>>
用tar和split将文件分包压缩
查看>>