设计模式系列 - 简单工厂

简介:

  简单工厂其实不是GOF中的设计模式,但是使用非常的广泛。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。

   简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。

简单工厂

酸奶产品:YogHurt.java


 
 
  1. /** 
  2.  * 酸奶的类, 主要是本人比较熟悉酸奶,呵呵 
  3.  * @author keju.wangkj 
  4.  *  
  5.  */ 
  6. public class YogHurt { 
  7.     private YogType yogType; 
  8.     private Date produceDay; 
  9.     private int validDays; 
  10.     private String producer; 
  11.  
  12.     public YogType getYogType() { 
  13.         return yogType; 
  14.     } 
  15.  
  16.     public void setYogType(YogType yogType) { 
  17.         this.yogType = yogType; 
  18.     } 
  19.  
  20.     public Date getProduceDay() { 
  21.         return produceDay; 
  22.     } 
  23.  
  24.     public void setProduceDay(Date produceDay) { 
  25.         this.produceDay = produceDay; 
  26.     } 
  27.  
  28.     public int getValidDays() { 
  29.         return validDays; 
  30.     } 
  31.  
  32.     public void setValidDays(int validDays) { 
  33.         this.validDays = validDays; 
  34.     } 
  35.  
  36.     public String getProducer() { 
  37.         return producer; 
  38.     } 
  39.  
  40.     public void setProducer(String producer) { 
  41.         this.producer = producer; 
  42.     } 
  43.  
  44.     @Override 
  45.     public int hashCode() { 
  46.         final int prime = 31
  47.         int result = 1
  48.         result = prime * result 
  49.                 + ((produceDay == null) ? 0 : produceDay.hashCode()); 
  50.         result = prime * result 
  51.                 + ((producer == null) ? 0 : producer.hashCode()); 
  52.         result = prime * result + validDays; 
  53.         result = prime * result + ((yogType == null) ? 0 : yogType.hashCode()); 
  54.         return result; 
  55.     } 
  56.  
  57.     @Override 
  58.     public boolean equals(Object obj) { 
  59.         if (this == obj) 
  60.             return true
  61.         if (obj == null
  62.             return false
  63.         if (getClass() != obj.getClass()) 
  64.             return false
  65.         YogHurt other = (YogHurt) obj; 
  66.         if (produceDay == null) { 
  67.             if (other.produceDay != null
  68.                 return false
  69.         } else if (!produceDay.equals(other.produceDay)) 
  70.             return false
  71.         if (producer == null) { 
  72.             if (other.producer != null
  73.                 return false
  74.         } else if (!producer.equals(other.producer)) 
  75.             return false
  76.         if (validDays != other.validDays) 
  77.             return false
  78.         if (yogType == null) { 
  79.             if (other.yogType != null
  80.                 return false
  81.         } else if (!yogType.equals(other.yogType)) 
  82.             return false
  83.         return true
  84.     } 
  85.  
  86.     @Override 
  87.     public String toString() { 
  88.         return "Yoghurt [produceDay=" + produceDay + ", producer=" + producer 
  89.                 + ", validDays=" + validDays + ", yogType=" + yogType + "]" 
  90.     } 
  91.  

 


 
 
  1. /** 
  2.  * 原味、草莓、红枣的 
  3.  * @author keju.wangkj 
  4.  * 
  5.  */ 
  6. public enum YogType { 
  7.     RAW,  
  8.     BERRY, 
  9.     CHINESEDATE 

YogHurtFactory.java


 
 
  1. public class YogHurtFactory { 
  2.     private static YogHurt yogHurt; 
  3.     public static YogHurt getYougHurt(YogType yogType){ 
  4.         yogHurt = new YogHurt(); 
  5.         switch (yogType) { 
  6.         case RAW: 
  7.             yogHurt.setYogType(YogType.RAW);    
  8.             break
  9.         case BERRY: 
  10.             yogHurt.setYogType(YogType.BERRY);    
  11.             break
  12.         case CHINESEDATE: 
  13.             yogHurt.setYogType(YogType.CHINESEDATE);    
  14.             break
  15.         default
  16.             yogHurt.setYogType(YogType.RAW);    
  17.             break
  18.         } 
  19.         yogHurt.setProduceDay(new Date()); 
  20.         yogHurt.setProducer("光明牛奶"); 
  21.         yogHurt.setValidDays(10); 
  22.         packages(); 
  23.         return yogHurt; 
  24.     } 
  25.     private static void packages() { 
  26.         System.out.println("装箱、打包"); 
  27.     } 

 测试类:


 
 
  1. public class YogHurtFactoryTest { 
  2.  
  3.     @Test 
  4.     public void testGetYougHurt() { 
  5.         System.out.println(YogHurtFactory.getYougHurt(YogType.CHINESEDATE).toString()); 
  6.     } 
  7.  

 装箱、打包

Yoghurt [produceDay=Thu Jan 06 00:39:43 CST 2011, producer=光明牛奶, validDays=10, yogType=CHINESEDATE]

 

 本文转自 tianya23 51CTO博客,原文链接:http://blog.51cto.com/tianya23/472699,如需转载请自行联系原作者

相关文章
|
设计模式 Java 数据库
小谈设计模式(2)—简单工厂模式
小谈设计模式(2)—简单工厂模式
|
设计模式 Java PHP
php设计模式--简单工厂模式(一)
php设计模式--简单工厂模式(一)
100 0
|
7月前
|
设计模式 算法 Java
设计模式觉醒系列(04)策略模式|简单工厂模式的升级版
本文介绍了简单工厂模式与策略模式的概念及其融合实践。简单工厂模式用于对象创建,通过隐藏实现细节简化代码;策略模式关注行为封装与切换,支持动态替换算法,增强灵活性。两者结合形成“策略工厂”,既简化对象创建又保持低耦合。文章通过支付案例演示了模式的应用,并强调实际开发中应根据需求选择合适的设计模式,避免生搬硬套。最后推荐了JVM调优、并发编程等技术专题,助力开发者提升技能。
|
11月前
|
设计模式 关系型数据库
「全网最细 + 实战源码案例」设计模式——简单工厂模式
简单工厂模式是一种创建型设计模式,通过工厂类根据传入参数创建不同类型的对象,也称“静态工厂方法”模式。其结构包括工厂类、产品接口和具体产品类。优点是封装性强、代码复用性好;缺点是扩展性差,增加新产品时需修改工厂类代码,违反开闭原则。适用于对象种类较少且调用者无需关心创建细节的场景。
237 19
|
设计模式
设计模式-简单工厂和工厂方法
设计模式-简单工厂和工厂方法
101 0
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
这篇文章详细解释了工厂模式,包括简单工厂、工厂方法和抽象工厂三种类型。每种模式都通过代码示例展示了其应用场景和实现方法,并比较了它们之间的差异。简单工厂模式通过一个工厂类来创建各种产品;工厂方法模式通过定义一个创建对象的接口,由子类决定实例化哪个类;抽象工厂模式提供一个创建相关或依赖对象家族的接口,而不需要明确指定具体类。
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
|
设计模式 XML Java
【一】设计模式~~~创建型模式~~~简单工厂模式(Java)
文章详细介绍了简单工厂模式(Simple Factory Pattern),这是一种创建型设计模式,用于根据输入参数的不同返回不同类的实例,而客户端不需要知道具体类名。文章通过图表类的实例,展示了简单工厂模式的结构、时序图、代码实现、优缺点以及适用环境,并提供了Java代码示例和扩展应用,如通过配置文件读取参数来实现对象的创建。
【一】设计模式~~~创建型模式~~~简单工厂模式(Java)
|
设计模式 uml C语言
设计模式----------工厂模式之简单工厂模式(创建型)
这篇文章详细介绍了简单工厂模式,包括其定义、应用场景、UML类图、通用代码实现、运行结果、实际应用例子,以及如何通过反射机制实现对象创建,从而提高代码的扩展性和维护性。
设计模式----------工厂模式之简单工厂模式(创建型)
|
设计模式 测试技术 Go
[设计模式]创建型模式-简单工厂模式
[设计模式]创建型模式-简单工厂模式
124 1
|
设计模式 Java
Java设计模式:工厂模式之简单工厂、工厂方法、抽象工厂(三)
Java设计模式:工厂模式之简单工厂、工厂方法、抽象工厂(三)

热门文章

最新文章