今天看了下设计模式中的桥接模式,发现还是很有趣味的,笔记之。举个例子,比如GG要约会MM,不同的MM喜欢喜欢不同的地点,
比如rose喜欢去电影院,KITTY喜欢去西餐厅,而TOM,peter 都是GG,他们要分别去约会这两位MM了,而约会的地点,全部由MM决定
首先是MM接口
package com.liao.bridge1;
public interface MM {
void date();
}
Rose:
package com.liao.bridge1;
public class Rose implements MM {
public void date()
{
System.out.println("我是Rose,我喜欢去电影院");
}
}
Kitty:
package com.liao.bridge1;
public class Kitty implements MM {
public void date()
{
System.out.println("我是kitty,我喜欢去西餐厅吃西餐");
}
}
GG的接口
package com.liao.bridge1;
public abstract class GG {
protected MM mm;
public abstract void dateplace();
//根据不同约的对象,返回不同的MM实例
protected MM chooseplace(String girl)
{
if (girl.equals("rose"))
{
return new Rose();
}
else if (girl.equals("kitty"))
{
return new Kitty();
}//默认约ROSE
else{
return new Rose();
}
}
}
TOM:
package com.liao.bridge1;
public class TOM extends GG{
private MM mm;
public TOM(String girl)
{
mm=chooseplace(girl);
}
public void dateplace()
{
mm.date();
}
}
Peter:
package com.liao.bridge1;
public class Peter extends GG{
private MM mm;
public Peter(String place)
{
mm=chooseplace(place);
}
public void dateplace()
{
mm.date();
}
}
主程序
package com.liao.bridge1;
public class Client{
public static void main(String[] args) {
System.out.println("我是TOM,我想约rose");
GG tom=new TOM("rose");
tom.dateplace();
System.out.println("我是TOM,我想约kitty");
tom=new TOM("kitty");
tom.dateplace();
System.out.println("我是Peter,我想约rose");
GG peter=new Peter("rose");
peter.dateplace();
System.out.println("我是Peter,我想约kitty");
peter=new Peter("kitty");
peter.dateplace();
}
}
运行起来
我是TOM,我想约rose
我是Rose,我喜欢去电影院
我是TOM,我想约kitty
我是kitty,我喜欢去西餐厅吃西餐
我是Peter,我想约rose
我是Rose,我喜欢去电影院
我是Peter,我想约kitty
我是kitty,我喜欢去西餐厅吃西餐
可以看到桥接模式还是很不错的哦,在实际应用中,比如一个程序,有三类不同的功能,而这个程序需要分别在不同的操作平台运行的话,可以大大减少子类的数量哦,当然对桥接模式更深的讨论可以参见园子里其他朋友的文章