bridge 桥接方式
bridge 桥接模式
假想需求
有白人 黑人 有说英语的白人 有说汉语的白人 有说汉语的黑人 有说英语的黑人
按照一般的方法 子类 父类 可以造出4个子类来 这还是2*2的组合 假如分支多了就是N*N了
解决
桥接模式
分出其中一种稳定的类型分支用继承体系来区分 另一种行为分支用接口封装行为(策略模式?)
接下来看代码
抽象人
public abstract class People { protected Language language; abstract void speak(); }
黑人
public class BlackPeople extends People { /** * */ public BlackPeople() { } public BlackPeople(Language language){ this.language=language; } @Override void speak() { System.out.println("I'm black"); language.speak(); } }
白人
public class WhitePeople extends People { /** * */ public WhitePeople() { } public WhitePeople(Language language){ this.language=language; } @Override void speak() { System.out.println("I'm white"); language.speak(); } }
行为抽象类
public interface Language { void speak(); }
汉语
public class Chinese implements Language { public void speak() { System.out.println("你好 世界"); } }
英语
public class English implements Language { public void speak() { System.out.println("hello world"); } }
测试类
public class Client extends TestCase { public void test1() { People black=new BlackPeople(new Chinese()); black.speak(); People black2=new BlackPeople(new English()); black2.speak(); System.out.println("============="); People white=new WhitePeople(new Chinese()); white.speak(); People white2=new WhitePeople(new English()); white2.speak(); } }
输出
I'm black 你好 世界 I'm black hello world ============= I'm white 你好 世界 I'm white hello world
这样使用模式后 极大的减少了代码 虽然现在有6个类 但是这是 1+1+2+2
假如按照原来的分法 有N*N个分支 使用模式后 会有1+1+N+N 而不是N*N个类
代码少了 出错的几率就少了 改需求的时候改的地方也少了 更重要的是 没有了重复的代码片段
1 楼
锅巴49
2010-08-16
懂了,这个桥接模式说得好。