论坛首页 Java企业应用论坛

女友多的好处 (简单工厂模式)

浏览 8786 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (9) :: 隐藏帖 (17)
作者 正文
   发表时间:2009-12-05   最后修改:2009-12-06

java 的switch 语句的case 匹配为什么不能像delphi一样 支持String类型 哦

 

这里可以通过反射的话效果更佳

 

// 女友工厂

public class DreamGirlCreatFactory {
  
 
  public static DreamGirl creatDreamGirl(String girlName){
    
  if(girlName.equals("BeautifulGirl")){
   
   return new BeautifulGirl();
   
  }else if(girlName.equals("LivelyGirl")){
   
   
   return new LivelyGirl();
  } 
  else if(girlName.equals("LooksMediocreGirl")){
   
   return new LooksMediocreGirl();
   
  }else if(girlName.equals("SensibleGirl")){
   
   return new SensibleGirl();
   
  }
return null;
   
  
 } 
 public static void main(String[] args){
  
  String girlName1 = "BeautifulGirl";
  String girlName2 = "LivelyGirl";
  String girlName3 = "LooksMediocreGirl";
  String girlName4 = "SensibleGirl";
  
  String[] girlName = new String[4];
  girlName[0]=girlName1;
  girlName[1]=girlName2;
  girlName[2]=girlName3;
  girlName[3]=girlName4;
  
  for(int i=0; i<4;i++){
   
   DreamGirl girl = DreamGirlCreatFactory.creatDreamGirl( girlName[i]);
   girl.can_do_something_for_boy();
  }
  }
 

}


 

下面是创建的对象的 接口

//基类

public class DreamGirl {
 
 public void can_do_something_for_boy(){

 }

}

 

下面都是具体实现

 

public class BeautifulGirl extends DreamGirl {

  
 public void can_do_something_for_boy() {
  
   System.out.println("陪老公逛街!!!");
 }
 
 

}

 

 

public class LivelyGirl extends DreamGirl {

 
 public void can_do_something_for_boy() {
   
   System.out.println("陪老公聊天!!!");
 }
 
}

 

 

public class LooksMediocreGirl extends DreamGirl {
 
 public void can_do_something_for_boy() {
   
   System.out.println("给老公做饭!!!");
 }
 

}

 

 

public class SensibleGirl extends DreamGirl {
 
 public void can_do_something_for_boy() {
   
   System.out.println("给老公洗衣服!!!");
 }
 

}


 

   发表时间:2009-12-06  
enum 还不够吗
0 请登录后投票
   发表时间:2009-12-06  
Java7就支持String作为Case了。
1 请登录后投票
   发表时间:2009-12-07  
根据ls们总结

1.lz的例子更适合enum。
2.现在string可以作为case了。
0 请登录后投票
   发表时间:2009-12-07   最后修改:2009-12-07
建议LZ将每种类型的美女,再放到一个小的简单工厂里,然后把这些小工厂放到一个final的HashMap里,通过多态的方式处理,直接舍弃switch就行了。简单工厂如:
//接口:
public interface GirlFactory{
   DreamGirl creatDreamGirl();
}

  public class BeautifulGirlFactory implements GirlFactory{  

      public DreamGirl creatDreamGirl(){
          return new BeautifulGirl();
      }
  }


然后在DreamGirlCreatFactory 里放一个HashMap:
    private final Map map = new HashMap(){
      {
          put("BeautifulGirl",new BeautifulGirlFactory());
       }
    };

其他的美女跟这个类似,在使用时改为:
public static DreamGirl creatDreamGirl(String girlName){ 
    return map.get(girlName).creatDreamGirl();//可以做一些额外处理,在此简化
}



看起来感觉更好一些,只是比较复杂。。。
0 请登录后投票
   发表时间:2009-12-07  
hankesi2000 写道
建议LZ将每种类型的美女,再放到一个小的简单工厂里,然后把这些小工厂放到一个final的HashMap里,通过多态的方式处理,直接舍弃switch就行了。简单工厂如:
//接口:
public interface GirlFactory{
   DreamGirl creatDreamGirl();
}

  public class BeautifulGirlFactory implements GirlFactory{  

      public DreamGirl creatDreamGirl(){
          return new BeautifulGirl();
      }
  }


然后在DreamGirlCreatFactory 里放一个HashMap:
    private final Map map = new HashMap(){
      {
          put("BeautifulGirl",new BeautifulGirlFactory());
       }
    };

其他的美女跟这个类似,在使用时改为:
public static DreamGirl creatDreamGirl(String girlName){ 
    return map.get(girlName).creatDreamGirl();//可以做一些额外处理,在此简化
}



看起来感觉更好一些,只是比较复杂。。。

这个应该就是抽象工厂模式了
0 请登录后投票
   发表时间:2009-12-07  
lz,你的女朋友多是多,不过都需要临时去找,不如先找好,放在那里,等要的时候直接去拿不更方便嘛,呵呵,而且这也有一个好处,一是一个可以一直的使用,而是多少有个限制,毕竟,到底是凡人嘛,不能太过了,差不多就好了,太多了会内在溢出
0 请登录后投票
   发表时间:2009-12-07  
wangdgsc 写道
lz,你的女朋友多是多,不过都需要临时去找,不如先找好,放在那里,等要的时候直接去拿不更方便嘛,呵呵,而且这也有一个好处,一是一个可以一直的使用,而是多少有个限制,毕竟,到底是凡人嘛,不能太过了,差不多就好了,太多了会内在溢出


这是简单工厂啦,你的要求应该是hankesi2000写到的抽象工厂方法嘿嘿
0 请登录后投票
   发表时间:2009-12-08  
意义何在? 解决了什么问题? 要添加新女友还必须修改factory....而且像其他人提出的那样,用string作这个是非常不好的。 要用enum. 可以参看effective java 1st/2nd edition.
不是用Pattern就好阿。。
0 请登录后投票
   发表时间:2009-12-08  
wangdgsc 写道
lz,你的女朋友多是多,不过都需要临时去找,不如先找好,放在那里,等要的时候直接去拿不更方便嘛,呵呵,而且这也有一个好处,一是一个可以一直的使用,而是多少有个限制,毕竟,到底是凡人嘛,不能太过了,差不多就好了,太多了会内在溢出


这时候是不是可以考虑建立一个 girl池啊
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics