Bridge 1.隶属类型:结构模式 2.使用条件: 通常,当一个抽象类或接口有多个具体实现(concrete subclass),这些concrete 之间关系可 能有以下两种: a.这多个具体实现之间恰好是并列的,如打架,要不徒手,要不带点家伙.两者之间并列 b.实际应用上,常常有可能在这多个具体实现之间有概念上重叠.那么需要我们把抽 象共同部分和行为共同部分各自独立开来,原来是准备放在一个接口里,现在需要设计两个 接口,分别放置抽象和行为.(关键 :抽象共同部分与行为共同部分的独立分开.),又如上 打架带家伙得看看带的是什么.什么木制的,管制的,砖制的,一大批,在加上原来的徒手的 在加上打架的风格,是暴打族还是这灵巧型.... 打架的家族也够狠的,懵懵懂懂的搞了一大堆继承,挂矣... 3.基本思想: 将抽象和行为划分开来,各自独立,但能动态的结合. 4.示例 /** * The Abstract of fight */ public abstract class Fight { protected String name; public abstract void hitOthers(); public String getName() { return name; } protected FightImp getProps(String prop) {//factory if(prop.equals("knife")) { return new FightImpKnife(); } else if(prop.equals("brick")) { return new FightImpBrick(); } else { return new FightImpEmpty(); } } } /** * The RefinedAbstraction */ public class FightCrazy extends Fight { FightImp prop; public FightCrazy(String prop,String name) { this.prop=getProps(prop); this.name=name; } public void hitOthers() { System.out.println("暴打族:"+getName()); prop.useProps(); } } /** * The RefinedAbstraction */ public class FightSmart extends Fight { FightImp prop; public FightSmart(String prop,String name) { this.prop=getProps(prop); this.name=name; } public void hitOthers() { System.out.println("身手敏捷型:"+getName()); prop.useProps(); } }
/** * The Implementor */ public interface FightImp { public abstract void useProps(); }
/** * The ConcreteImplementor */ public class FightImpBrick implements FightImp { public void useProps() { System.out.println("国产板砖,质优价廉.若使用满意请按13xxxxxxxxx继续定购"); } }
/** * The ConcreteImplementor */ public class FightImpKnife implements FightImp { public void useProps() { System.out.println("厚背杀猪刀"); } }
/** * The ConcreteImplementor */ public class FightImpEmpty implements FightImp { public void useProps() { System.out.println("最搞境界:空手套白狼"); } } Abstraction (Fight ) — 定义抽象类的接口。 — 维护一个指向Implementor类型对象的指针。 . RefinedAbstraction (FightCrazy,FightSmart) — 扩充由Abstraction定义的接口。 . Implementor (XXImp) — 定义实现类的接口,该接口不一定要与Abstraction的接口完全一致;事实上这两个 接口可以完全不同。一般来讲, Implementor接口仅提供基本操作,而Abstraction则 定义了基于这些基本操作的较高层次的操作。 . ConcreteImplementor (XxxImp) — 实现Implementor接口并定义它的具体实现。
5.归纳: 1.Bridge 模式的执行类如"打架"和"使用的道具"是一对一的关系, 正确创建FightImp 是该模式的关键, 2.抽象共同部分中一定有一个行为的interface作为其属性 并用有一方法作为它初始的入口:getProps(); 3.在其"抽象共同部分"具体的行为过程中添加"行为属性"的行为,每一个RefinedAbstraction中都有一个Imp做为其成员变量,聚合使用 链接: 1.设计模式(可复用面向对象软件的基础) 2.设计模式(Patterns in Java) -- http://www.jdon.com 
|