java设计模式--结构型模式--桥接模式

 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.Abstraction
23       定义抽象类的接口。
24       维护一个指向Implementor类型对象的指针。
25
26     2.RefinedAbstraction
27       扩充由Abstraction定义的接口。
28
29     3.Implementor
30       定义实现类的接口,该接口不一定要与Abstraction的接口完全一致。
31       事实上这两个接口可以完全不同。
32       一般来讲,Implementor接口仅提供基本操作,而Abstraction则定义了基于这些基本操作的较高层次的操作。
33
34     4.ConcreteImplementor
35       实现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 }
时间: 2024-10-03 16:18:58

java设计模式--结构型模式--桥接模式的相关文章

设计模式(结构型)之组合模式(Composite Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 阅读前一篇<设计模式(结构型)之桥接模式(Bridge Pattern)> http://blog.csdn.net/yanbober/article/details/45366781 概述 组合模式又叫做部分-整体模式,使我们在树型结构的问题中模糊简单元素和复杂元素的概念,客户程序可以像

设计模式(结构型)之外观模式(Facade Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 阅读前一篇<设计模式(结构型)之装饰者模式(Decorator Pattern)>http://blog.csdn.net/yanbober/article/details/45395747 概述 一个客户类需要和多个业务类交互,而这些业务类经常会作为整体出现,由于涉及到的类比较多,导致使

设计模式(结构型)之代理模式(Proxy Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 阅读前一篇<设计模式(结构型)之享元模式(Flyweight Pattern)>http://blog.csdn.net/yanbober/article/details/45477551 概述 代理模式是常用的结构型设计模式之一,当无法直接访问某个对象或访问某个对象存在困难时可以通过一个

Java设计模式之四 ----- 适配器模式和桥接模式

前言 在上一篇中我们学习了创建型模式的建造者模式和原型模式.本篇则来学习下结构型模式的适配器模式和桥接模式. 适配器模式 简介 适配器模式是作为两个不兼容的接口之间的桥梁.这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能. 简单的来说就是通过某个接口将不兼容的两个类进行兼容,俗称转换器.生活比较典型的例子是电器的电压,美国的电压是110V左右, 而中国的电压普片是220V,如果我们想用美国或日本的电器,则需要一个转换器,将110V转换成220V.还有一个很典型例子就是曾经的万能充,基

Java设计模式菜鸟系列(十七)桥接模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40008711 桥接模式(Bridge): 把事物和其具体实现分开(抽象化与实现化解耦),使他们可以各自独立的变化.假设你的电脑是双系统(WinXP.Win7),而且都安装了mysql.oracle.sqlserver.DB2这4种数据库,那么你有2*4种选择去连接数据库.按平常的写法,咱要写2*4个类,但是使用了桥接模式,你只需写2+4个类,可以看出桥接模式其实就是一种将N*M转化成N+

java设计模式--结构型模式--组合模式

什么是组合模式,这个有待研究,个人觉得是各类组合而形成的一种结构吧. 组合模式: 1 组合模式 2 概述 3 将对象组合成树形结构以表示"部分-整体"的层次结构."Composite使得用户对单个对象和组合对象的使用具有一致性." 4 5 6 适用性 7 1.你想表示对象的部分-整体层次结构. 8 9 2.你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象. 10 11 12 参与者 13 1.Component 14 为组合中的对象声明接

java设计模式--结构型模式--享元模式

享元模式 概述 运用共享技术有效地支持大量细粒度的对象. 适用性 当都具备下列情况时,使用Flyweight模式: 1.一个应用程序使用了大量的对象. 2.完全由于使用大量的对象,造成很大的存储开销. 3.对象的大多数状态都可变为外部状态. 4.如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象. 5.应用程序不依赖于对象标识.由于Flyweight对象可以被共享,对于概念上明显有别的对象,标识测试将返回真值. 参与者 1.Flyweight 描述一个接口,通过这个接口flywe

java设计模式--结构型模式--装饰模式

1 装饰模式 2 概述 3 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator模式相比生成子类更为灵活. 4 5 6 适用性 7 1.在不影响其他对象的情况下,以动态.透明的方式给单个对象添加职责. 8 9 2.处理那些可以撤消的职责. 10 11 3.当不能采用生成子类的方法进行扩充时. 12 参与者 13 1.Component 14 定义一个对象接口,可以给这些对象动态地添加职责. 15 16 2.ConcreteComponent 17 定义一个对象,可以给这个对象添

java设计模式--结构型模式--外观模式

1 外观模式 2 概述 3 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 4 5 6 适用性 7 1.当你要为一个复杂子系统提供一个简单接口时.子系统往往因为不断演化而变得越来越 8 复杂.大多数模式使用时都会产生更多更小的类.这使得子系统更具可重用性,也更容 9 易对子系统进行定制,但这也给那些不需要定制子系统的用户带来一些使用上的困难. 10 Facade可以提供一个简单的缺省视图,这一视图对大多数用户来说已经足够,而那些需