- 浏览: 694408 次
- 性别:
- 来自: 沈阳
文章分类
- 全部博客 (270)
- Ant Tool Script (12)
- XMLDigest (5)
- MyEclipse8.6 (1)
- RedHat (5)
- SVNVersionController (4)
- BatOperation (6)
- JspAndFaceWeb (66)
- javaSwing (18)
- PHP (12)
- J2SE (6)
- TestToolAndTestManual (12)
- C# (34)
- Java PatternDesign (20)
- Axis2AndWebService (5)
- ITLive (2)
- DBAndControl (10)
- C/C++ (8)
- Andriod (7)
- Python (7)
- JavaWork (16)
- Android-QA (1)
- Apache-Wicket (1)
- POI (1)
- JQuery (2)
- Struts2 (1)
- Flex&Flash (6)
- sdsdsd (0)
- 1212 (0)
最新评论
-
anayomin:
对九楼继续改进
public static <T> ...
Java List 分页 -
H4X0R:
来学习学习,赞一个
Aqua Data Studio 导出SQL -
yankai0219:
现在出现这个错误 Fatal error: Class 'PH ...
纯PHP搭建Apache+Eclipse+xDebug+PHPUnit+MakeGood -
yankai0219:
您好,我在搭建环境中提示PHPUnit_Framework_T ...
纯PHP搭建Apache+Eclipse+xDebug+PHPUnit+MakeGood -
wilsonchen:
chenhailong 写道wilsonchen 写道chen ...
C# RSA和Java RSA互通
Java PatternDesign of GOF(四人帮力作,享誉15年)
第十模式
板桥里人 http://www.jdon.com 2002/05/01
Bridge模式定义 :
将抽象和行为划分开来,各自独立,但能动态的结合。
任何事物对象都有抽象和行为之分,例如人,人是一种抽象,人分男人和女人等;人有行为,行为也有各种具体表现,所以,“人”与“人的行为”两个概念也反映了抽象和行为之分。
在面向对象设计的基本概念中,对象这个概念实际是由属性和行为两个部分组成的,属性我们可以认为是一种静止的,是一种抽象,一般情况下,行为是包含在一个对象中,但是,在有的情况下,我们需要将这些行为也进行归类,形成一个总的行为接口,这就是桥模式的用处。
为什么使用?
不希望抽象部分和行为有一种固定的绑定关系,而是应该可以动态联系的。
如果一个抽象类或接口有多个具体实现(子类、concrete subclass),这些子类之间关系可能有以下两种情况:
1. 这多个子类之间概念是并列的,如前面举例,打桩,有两个concrete class:方形桩和圆形桩;这两个形状上的桩是并列的,没有概念上的重复。
2.这多个子类之中有内容概念上重叠.那么需要我们把抽象共同部分和行为共同部分各自独立开来,原来是准备放在一个接口里,现在需要设计两个接口:抽象接口和行为接口,分别放置抽象和行为.
例如,一杯咖啡为例,子类实现类为四个:中杯加奶、大杯加奶、 中杯不加奶、大杯不加奶。
但是,我们注意到:上面四个子类中有概念重叠,可从另外一个角度进行考虑,这四个类实际是两个角色的组合:抽象 和行为,其中抽象为:中杯和大杯;行为为:加奶 不加奶(如加橙汁 加苹果汁).
实现四个子类在抽象和行为之间发生了固定的绑定关系,如果以后动态增加加葡萄汁的行为,就必须再增加两个类:中杯加葡萄汁和大杯加葡萄汁。显然混乱,扩展性极差。
那我们从分离抽象和行为的角度,使用Bridge模式来实现。
如何实现?
以上面提到的咖啡 为例. 我们原来打算只设计一个接口(抽象类),使用Bridge模式后,我们需要将抽象和行为分开,加奶和不加奶属于行为,我们将它们抽象成一个专门的行为接口.
先看看抽象部分的接口代码:
public abstract class Coffee { CoffeeImp coffeeImp; public void setCoffeeImp() { this.CoffeeImp = CoffeeImpSingleton.getTheCoffeImp(); } public CoffeeImp getCoffeeImp() {return this.CoffeeImp;} public abstract void pourCoffee(); } |
其中CoffeeImp 是加不加奶的行为接口,看其代码如下:
public abstract class CoffeeImp { public abstract void pourCoffeeImp(); } |
现在我们有了两个抽象类,下面我们分别对其进行继承,实现concrete class:
//中杯 //大杯 |
上面分别是中杯和大杯的具体实现.下面再对行为CoffeeImp进行继承:
//加奶 //不加奶 |
Bridge模式的基本框架我们已经搭好了,别忘记定义中还有一句:动态结合,我们现在可以喝到至少四种咖啡:
1.中杯加奶
2.中杯不加奶
3.大杯加奶
4.大杯不加奶
看看是如何动态结合的,在使用之前,我们做个准备工作,设计一个单态类(Singleton)用来hold当前的CoffeeImp:
public class CoffeeImpSingleton { private static CoffeeImp coffeeImp; public CoffeeImpSingleton(CoffeeImp coffeeImpIn) {this.coffeeImp = coffeeImpIn;} public static CoffeeImp getTheCoffeeImp() { return coffeeImp; } } |
看看中杯加奶 和大杯加奶 是怎么出来的:
//拿出牛奶
CoffeeImpSingleton coffeeImpSingleton = new CoffeeImpSingleton(new MilkCoffeeImp());
//中杯加奶
MediumCoffee mediumCoffee = new MediumCoffee();
mediumCoffee.pourCoffee();
//大杯加奶
SuperSizeCoffee superSizeCoffee = new SuperSizeCoffee();
superSizeCoffee.pourCoffee();
注意: Bridge模式的执行类如CoffeeImp和Coffee是一对一的关系, 正确创建CoffeeImp是该模式的关键。
发表评论
-
Create A half transparent DIV
2013-01-22 16:49 1149今天遇到了半透明div的创建和跨浏览器的实装 下面给 ... -
backup
2013-01-05 14:20 0http://atoz-tech.blogspot.jp/20 ... -
SpringMVC wizard简单示例
2012-12-28 17:02 0public class UserController ... -
JavaScript模式化编程-字面量和构造方法
2012-12-27 18:22 1035字面量和构造方法 我不知道大家对这个有什么概念。 ... -
JavaScript模式化编程
2012-12-25 10:26 1011我不知道现在生活中的苦是不是对自己是一种好处,我也不知道 ... -
设计模式(要提高编程水平进)
2011-02-27 22:07 1231设计,是编程语 ... -
Java PatternDesign of GOF(四人帮力作,享誉15年)第十六模式
2011-02-09 08:52 1152Java PatternDesign of GOF(四人帮力作 ... -
Java PatternDesign of GOF(四人帮力作,享誉15年)第十五模式
2011-02-09 08:50 1059Java PatternDesign of GOF(四人帮力作 ... -
Java PatternDesign of GOF(四人帮力作,享誉15年)第十四模式
2011-02-09 08:49 1020Java PatternDesign of GOF(四人帮力作 ... -
Java PatternDesign of GOF(四人帮力作,享誉15年)第十三模式
2011-02-09 08:47 1008Java PatternDesign of GOF(四 ... -
Java PatternDesign of GOF(四人帮力作,享誉15年)第十二模式
2011-02-02 10:15 1102Java PatternDesign of GOF(四 ... -
Java PatternDesign of GOF(四人帮力作,享誉15年)第十一模式
2011-02-02 10:08 1081Java PatternDesign of GOF(四人帮力作 ... -
Java PatternDesign of GOF(四人帮力作,享誉15年)第九模式
2011-02-02 10:03 1166Java PatternDesign of GOF(四 ... -
Java PatternDesign of GOF(四人帮力作,享誉15年)第八模式
2011-02-02 09:58 1056Java PatternDesign of GOF(四人帮力作 ... -
Java PatternDesign of GOF(四人帮力作,享誉15年)第七模式
2011-02-02 09:54 1141Java PatternDesign of GOF(四人帮力作 ... -
Java PatternDesign of GOF(四人帮力作,享誉15年)第六模式
2011-02-02 09:51 907Java PatternDesign of GOF(四人帮力 ... -
Java PatternDesign of GOF(四人帮力作,享誉15年)第五模式
2011-01-31 12:45 1153Java PatternDesign of GOF(四人帮力作 ... -
Java PatternDesign of GOF(四人帮力作,享誉15年)第四模式
2011-01-31 12:43 1268Java PatternDesign of GOF(四人帮力作 ... -
Java PatternDesign of GOF(四人帮力作,享誉15年)第三模式
2011-01-31 12:40 1018Java PatternDesign of GOF(四 ... -
Java PatternDesign of GOF(四人帮力作,享誉15年)第二模式
2011-01-31 12:38 1438Java PatternDesign of GOF(四人帮力作 ...
相关推荐
GOF四人组的Design Pattern中文版,设计模式。四人帮,又称Gang of Four。
"patternDesign设计模式例子源码"这个压缩包很可能是包含了一些常见设计模式的实际应用示例,如单例模式、工厂模式、观察者模式等。下面我们将深入探讨这些设计模式及其重要性。 1. **单例模式**:单例模式确保一个...
Java设计模式是软件开发中的重要概念,它是一种在特定情境下解决常见问题的经验总结和最佳实践。在这篇文章中,我们将深入探讨两种常见的设计模式:Facade(外观)模式和Simple Factory(简单工厂)模式。 首先,让...
设计模式是软件工程领域中一套被广泛认可和应用的解决问题的模板或通用解决方案。它不是直接给出代码,而是描述在特定上下文中,如何解决常见设计问题的一种方法。设计模式可以帮助开发者提高代码的可重用性、可读性...
本项目"patterndesign"显然是基于《图解设计模式》这本教材的实践代码库,旨在帮助开发者深入理解和应用设计模式。 1. **单例模式(Singleton)**:确保一个类只有一个实例,并提供全局访问点。在Java中,单例模式...
Android、供应链、财务、百度推广、XML、Test、Struts2、Struts、SQLBase、SQLA、Spring、SEO、PHP、PatternDesign、Oracle、OOAD、NNTC、Moblie、Linux、JSP、Jquery、JNTC、Javascrip{过滤}t、JavaOOP、JavaBase、...