`

设计模式之桥接模式

阅读更多

   今天看了下设计模式中的桥接模式,发现还是很有趣味的,笔记之。举个例子,比如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,我喜欢去西餐厅吃西餐

   可以看到桥接模式还是很不错的哦,在实际应用中,比如一个程序,有三类不同的功能,而这个程序需要分别在不同的操作平台运行的话,可以大大减少子类的数量哦,当然对桥接模式更深的讨论可以参见园子里其他朋友的文章

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics