简单工厂其实不是GOF中的设计模式,但是使用非常的广泛。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。
酸奶产品:YogHurt.java
- /**
- * 酸奶的类, 主要是本人比较熟悉酸奶,呵呵
- * @author keju.wangkj
- *
- */
- public class YogHurt {
- private YogType yogType;
- private Date produceDay;
- private int validDays;
- private String producer;
- public YogType getYogType() {
- return yogType;
- }
- public void setYogType(YogType yogType) {
- this.yogType = yogType;
- }
- public Date getProduceDay() {
- return produceDay;
- }
- public void setProduceDay(Date produceDay) {
- this.produceDay = produceDay;
- }
- public int getValidDays() {
- return validDays;
- }
- public void setValidDays(int validDays) {
- this.validDays = validDays;
- }
- public String getProducer() {
- return producer;
- }
- public void setProducer(String producer) {
- this.producer = producer;
- }
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result
- + ((produceDay == null) ? 0 : produceDay.hashCode());
- result = prime * result
- + ((producer == null) ? 0 : producer.hashCode());
- result = prime * result + validDays;
- result = prime * result + ((yogType == null) ? 0 : yogType.hashCode());
- return result;
- }
- @Override
- public boolean equals(Object obj) {
- if (this == obj)
- return true;
- if (obj == null)
- return false;
- if (getClass() != obj.getClass())
- return false;
- YogHurt other = (YogHurt) obj;
- if (produceDay == null) {
- if (other.produceDay != null)
- return false;
- } else if (!produceDay.equals(other.produceDay))
- return false;
- if (producer == null) {
- if (other.producer != null)
- return false;
- } else if (!producer.equals(other.producer))
- return false;
- if (validDays != other.validDays)
- return false;
- if (yogType == null) {
- if (other.yogType != null)
- return false;
- } else if (!yogType.equals(other.yogType))
- return false;
- return true;
- }
- @Override
- public String toString() {
- return "Yoghurt [produceDay=" + produceDay + ", producer=" + producer
- + ", validDays=" + validDays + ", yogType=" + yogType + "]"
- }
- }
- /**
- * 原味、草莓、红枣的
- * @author keju.wangkj
- *
- */
- public enum YogType {
- RAW,
- BERRY,
- CHINESEDATE
- }
YogHurtFactory.java
- public class YogHurtFactory {
- private static YogHurt yogHurt;
- public static YogHurt getYougHurt(YogType yogType){
- yogHurt = new YogHurt();
- switch (yogType) {
- case RAW:
- yogHurt.setYogType(YogType.RAW);
- break;
- case BERRY:
- yogHurt.setYogType(YogType.BERRY);
- break;
- case CHINESEDATE:
- yogHurt.setYogType(YogType.CHINESEDATE);
- break;
- default:
- yogHurt.setYogType(YogType.RAW);
- break;
- }
- yogHurt.setProduceDay(new Date());
- yogHurt.setProducer("光明牛奶");
- yogHurt.setValidDays(10);
- packages();
- return yogHurt;
- }
- private static void packages() {
- System.out.println("装箱、打包");
- }
- }
测试类:
- public class YogHurtFactoryTest {
- @Test
- public void testGetYougHurt() {
- System.out.println(YogHurtFactory.getYougHurt(YogType.CHINESEDATE).toString());
- }
- }
装箱、打包
Yoghurt [produceDay=Thu Jan 06 00:39:43 CST 2011, producer=光明牛奶, validDays=10, yogType=CHINESEDATE]
本文转自 tianya23 51CTO博客,原文链接:http://blog.51cto.com/tianya23/472699,如需转载请自行联系原作者
