`
ysen
  • 浏览: 122161 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多

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("给老公洗衣服!!!");
 }
 

}


 

分享到:
评论
18 楼 wujiazhao88 2009-12-10  
话说起来JAVA7怎么有点像C#了,支持string的switch了。。
17 楼 treblesoftware 2009-12-09  
zhao_xiao_dong 写道
我一直对工厂模式没有一个好的理解,它的意思何在?
小弟经验不太足,望高手给个好的答案,最好举个例子哈!


如果你代码到处使用new A();
此时,如果你的对象不叫A,叫A2。
那么,这个时候你的代码里只要有new A();的地方都修要修改成new A2();这样一来,你要修改很多地方,当然,现在IDE一般支持自动重构,设计模式是很多年前的东西了,那个时候没有这么聪明的IDE。另外,普通工厂作用不大,更多是面向接口的,或者是抽象的。
16 楼 zhao_xiao_dong 2009-12-09  
我一直对工厂模式没有一个好的理解,它的意思何在?
小弟经验不太足,望高手给个好的答案,最好举个例子哈!
15 楼 ysen 2009-12-09  
treblesoftware 写道
grunt1223 写道
jasonw 写道
意义何在? 解决了什么问题? 要添加新女友还必须修改factory....而且像其他人提出的那样,用string作这个是非常不好的。 要用enum. 可以参看effective java 1st/2nd edition.
不是用Pattern就好阿。。


恩,我的理解是,简单工厂主要是将散布在各处的对象创建过程统一到一个类当中,试想有多个类中都要用到这些女友,万一需要修改某个女友的具体实现,就不需要在各处代码中修改,只要在工厂里修改具体的实现即可。

PS:DI本质上也是工厂啊,只是它们帮你实现了


呵呵,工厂可以帮助你管理那些对象么?工厂只帮你生成对象。

管理对象spring不错
14 楼 treblesoftware 2009-12-09  
grunt1223 写道
jasonw 写道
意义何在? 解决了什么问题? 要添加新女友还必须修改factory....而且像其他人提出的那样,用string作这个是非常不好的。 要用enum. 可以参看effective java 1st/2nd edition.
不是用Pattern就好阿。。


恩,我的理解是,简单工厂主要是将散布在各处的对象创建过程统一到一个类当中,试想有多个类中都要用到这些女友,万一需要修改某个女友的具体实现,就不需要在各处代码中修改,只要在工厂里修改具体的实现即可。

PS:DI本质上也是工厂啊,只是它们帮你实现了


呵呵,工厂可以帮助你管理那些对象么?工厂只帮你生成对象。
13 楼 grunt1223 2009-12-09  
jasonw 写道
意义何在? 解决了什么问题? 要添加新女友还必须修改factory....而且像其他人提出的那样,用string作这个是非常不好的。 要用enum. 可以参看effective java 1st/2nd edition.
不是用Pattern就好阿。。


恩,我的理解是,简单工厂主要是将散布在各处的对象创建过程统一到一个类当中,试想有多个类中都要用到这些女友,万一需要修改某个女友的具体实现,就不需要在各处代码中修改,只要在工厂里修改具体的实现即可。

PS:DI本质上也是工厂啊,只是它们帮你实现了
12 楼 treblesoftware 2009-12-09  
ysen 写道
jasonw 写道
意义何在? 解决了什么问题? 要添加新女友还必须修改factory....而且像其他人提出的那样,用string作这个是非常不好的。 要用enum. 可以参看effective java 1st/2nd edition.
不是用Pattern就好阿。。

简单工厂有它的优点也有缺点,没有完美的单独的设计模式,只有完美的设计模式的组合,我在工厂方法模式中,已经将这两种模式进行了对比


说个不好听的话,当DI加入JDK的时候,工厂还需要么?
11 楼 ysen 2009-12-08  
jasonw 写道
意义何在? 解决了什么问题? 要添加新女友还必须修改factory....而且像其他人提出的那样,用string作这个是非常不好的。 要用enum. 可以参看effective java 1st/2nd edition.
不是用Pattern就好阿。。

简单工厂有它的优点也有缺点,没有完美的单独的设计模式,只有完美的设计模式的组合,我在工厂方法模式中,已经将这两种模式进行了对比
10 楼 whaosoft 2009-12-08  
lz实现的是工厂模式中的简单工厂
9 楼 水车老大 2009-12-08  
wangdgsc 写道
lz,你的女朋友多是多,不过都需要临时去找,不如先找好,放在那里,等要的时候直接去拿不更方便嘛,呵呵,而且这也有一个好处,一是一个可以一直的使用,而是多少有个限制,毕竟,到底是凡人嘛,不能太过了,差不多就好了,太多了会内在溢出


这时候是不是可以考虑建立一个 girl池啊
8 楼 jasonw 2009-12-08  
意义何在? 解决了什么问题? 要添加新女友还必须修改factory....而且像其他人提出的那样,用string作这个是非常不好的。 要用enum. 可以参看effective java 1st/2nd edition.
不是用Pattern就好阿。。
7 楼 ysen 2009-12-07  
wangdgsc 写道
lz,你的女朋友多是多,不过都需要临时去找,不如先找好,放在那里,等要的时候直接去拿不更方便嘛,呵呵,而且这也有一个好处,一是一个可以一直的使用,而是多少有个限制,毕竟,到底是凡人嘛,不能太过了,差不多就好了,太多了会内在溢出


这是简单工厂啦,你的要求应该是hankesi2000写到的抽象工厂方法嘿嘿
6 楼 wangdgsc 2009-12-07  
lz,你的女朋友多是多,不过都需要临时去找,不如先找好,放在那里,等要的时候直接去拿不更方便嘛,呵呵,而且这也有一个好处,一是一个可以一直的使用,而是多少有个限制,毕竟,到底是凡人嘛,不能太过了,差不多就好了,太多了会内在溢出
5 楼 ysen 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();//可以做一些额外处理,在此简化
}



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

这个应该就是抽象工厂模式了
4 楼 hankesi2000 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();//可以做一些额外处理,在此简化
}



看起来感觉更好一些,只是比较复杂。。。
3 楼 jltest 2009-12-07  
根据ls们总结

1.lz的例子更适合enum。
2.现在string可以作为case了。
2 楼 魔力猫咪 2009-12-06  
Java7就支持String作为Case了。
1 楼 oxromantic 2009-12-06  
enum 还不够吗

相关推荐

    PHP实现工厂模式设计日志记录器

    在软件设计模式中,工厂模式是一种常用的创建型模式,它提供了一种创建对象的最佳方式。在PHP中,工厂模式能够帮助我们解耦代码,使得代码更具有灵活性和可扩展性。在这个例子中,我们将深入探讨如何使用工厂模式来...

    趣味JAVA23种设计模式

    想象一下,当你带女朋友去快餐店,无论是麦当劳还是肯德基,只需要简单地说一句“来四个鸡翅”,而不必关心具体是哪家的鸡翅,这是因为快餐店扮演了工厂的角色,客户只需提出需求,具体产品由工厂决定。此模式的优点...

    二十三种设计模式通俗理解

    比如,请女朋友吃汉堡时,您可以直接告诉她“我要一个汉堡”,至于是要牛肉汉堡还是鸡肉汉堡,则由女朋友根据自己的口味选择。这里,您扮演的是抽象工厂的角色,而具体的工厂(如麦当劳或肯德基)则负责根据客户的...

    C#WinForm窗体程序超级简单哄女朋友开心的小程序(送花)

    一个简单的C#WinForm窗体包含3个功能,由3个按钮分别实现: ...适合给哄女朋友开心或者用来表白,程序设计非常简单属于一看就会的内容,这个只是一个dome,后续计划有一个完善整合的哄女朋友开心的窗体程序

    一个23设计模式的搞笑解释

    1. **Factory(工厂模式)**: - **比喻**:在追求女朋友的过程中,无论是麦当劳的鸡翅还是肯德基的鸡翅,都是美味的选择。这里,麦当劳和肯德基就像是工厂,你只需要告诉服务员你需要多少鸡翅,具体的制作过程则由...

    23种设计模式幽默见解

    在幽默的例子中,为女朋友拍摄专业照片可能需要使用多种摄影技巧,而外观模式可以提供一个简单的接口,让女朋友只需关注拍照结果,而不用关心具体的技术细节。在软件设计中,外观模式可以简化复杂的子系统,提供一个...

    关于java23种设计模式的有趣见解

    在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用共同的接口来指向新创建的对象。 **案例解读**: 例如,当带着女友去快餐店吃东西时,无论是麦当劳还是肯德基,顾客只需要告诉服务员“来...

    关于23种设计模式的有趣见解(通俗易懂)

    工厂模式是一种非常实用的设计模式,它通过提供一个创建对象的接口,将实例化工作委托给子类。这种方式的好处在于用户只需要知道所需产品的抽象类型,而无需了解具体的实现细节。例如,文章中提到的例子是:当你带着...

    23种设计模式的比喻

    例如,当你带女朋友去快餐店,无论是麦当劳还是肯德基,只需要告诉服务员“我要四个鸡翅”,而不需要关心具体哪家店生产的鸡翅。 - **原理**: 在工厂模式中,客户类和工厂类是分离的。消费者只需要知道如何向工厂...

    C#23种设计模式_示例源代码及PDF

    13、CHAIN OF RESPONSIBLEITY —晚上去上英语课,为了好开溜坐到了最后一排,哇,前面 、 坐了好几个漂亮的 MM 哎, 找张纸条, 写上“Hi,可以做我的女朋友吗?如果不愿意请向前传”, 纸条就一个接一个的传上去了,...

    关于Java23种设计模式的有趣见解.

    **示例**:假设你有六个女朋友,她们的共同点就是都称呼你为“老公”,这意味着你就是这个家庭中的唯一老公,即“老公Singleton”。 **优点**: - 控制实例数量。 - 全局访问点。 **缺点**: - 单例模式通常被认为...

    设计模式与现实生活,形象,生动

    这就像工厂模式中,消费者只需要知道最终的产品是什么,而具体的实现细节则由工厂来处理。这种模式使得增加新的产品变得简单,只需要在工厂中添加相应的生产逻辑即可。 **2. 建造者模式(Builder)** 建造者模式...

    Java 24种设计模式

    抽象工厂模式是一种提供一系列相关或相互依赖对象的接口,而无需指定它们具体的类的设计模式。它关注的是创建一组相关的或相互依赖的对象,而非单个对象。 **应用场景:** 当你需要创建一组相关的产品族时,例如...

    送给女朋友的精美网页

    标签"表白女朋友 网页 情人节"表明这个项目具有浪漫和情感传达的目的,因此网页设计需要注重情感表达和用户体验。设计师可能需要运用浪漫色彩搭配,比如粉色、红色调,以及心形等爱情符号。同时,交互设计也需要考虑...

    23种设计模式与泡MM的关系

    1. 工厂模式(Factory):就像在麦当劳或肯德基点餐,你只需要告诉服务员想要的食物,而无需关心食物是如何制作的。工厂模式将对象的创建过程封装起来,让使用者只需关注产品的使用,而不用关心产品的生产细节。 2....

    前端动效告白女朋友神器,网页HTML

    标题中的“前端动效告白女朋友神器,网页HTML”指的是一个使用前端技术制作的互动告白页面,通过HTML、CSS和JavaScript实现动态效果,旨在给女朋友带来惊喜。这个项目的核心在于利用网页的交互性来表达情感,使得...

    JAVA设计模式与J2EE设计模式.doc

    - **抽象工厂模式**:抽象工厂模式提供了一种创建一系列相关或相互依赖对象的接口,而无需指定其具体的类。例如,通过抽象工厂,用户可以在运行时选择是去麦当劳还是肯德基购买鸡翅,无需关心具体的品牌。 - **...

    Java 设计模式 之 现实实例讲解

    - **概念**:工厂模式是一种创建型设计模式,它提供的解决方案是定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。 - **应用场景**:比如,你想请女孩吃饭,可以选择...

Global site tag (gtag.js) - Google Analytics