设计模式第一篇 工厂模式(1) 简单工厂模式simple factory

原创 2011年07月31日 15:52:59

工厂模式专门负责将拥有共同接口的类实例化。工厂模式可以动态的决定需要实例化哪个具体类,不必事先知道每次实例化哪个类!

工厂模式主要有三种形态:

1、简单工厂模式 simple factory : (又称静态工厂方法模式)

2、工厂方法模式 factory method : (又称多态性工厂模式)

3、抽象工厂模式 abstract factory : (又称工具箱模式)

本文将介绍第一种 简单工厂模式 的使用规则以及优缺点

(一) 首先我们先看一下simple factory 一般性结构图:

 

 

简单工厂模式就是工厂根据传入的参数决定创建出哪种具体的产品。

我们以园丁种植水果为例子具体剖析下simple factory :

"园丁根据客户的要求,种植不同的水果" ,代码如下:

 

public interface Fruit {

	/**
	 * 种植
	 */
	 public void plant();
	 
	 
}

 

public class Apple implements Fruit {

	public Apple(){
		System.out.println("Apple is produced...");
	}
	
	@Override
	public void plant() {
		System.out.println("Apple is plant...");
	}

	
	private int treeAge ;

	public int getTreeAge() {
		return treeAge;
	}

	public void setTreeAge(int treeAge) {
		this.treeAge = treeAge;
	}

}

 

public class Grape implements Fruit {

	public Grape(){
		System.out.println("Grape is produced...");
	}
	
	@Override
	public void plant() {
		System.out.println("Grape is plant...");
	}

}


 

public class SimpleFactory {
	
	/**
	 * 根据客户的指令生产某一种产品
	 * @param fruitName
	 * @return
	 */
	public static Fruit getFruit(String fruitName){
		if(fruitName.equals("apple")){
			return new Apple();
		}
		else if(fruitName.equals("grape")){
			return new Grape();
		}
		else{ 
			System.out.println("没有这种水果...");
			return null ;
		}
	}
	
	public static void main(String[] args) {
		//客户向工厂提供某种产品的生产指令,此时客户不需要关心产品到底是怎么生产出来的,全部交由工厂负责创建
		Fruit fruit = getFruit("apple");
		fruit.plant();
		
	}
}


(二) 抽象产品角色的省略

结构图如下


当系统只有一种具体产品角色时,就可以省略掉抽象产品角色

工厂类:
public class Creator{
     //生产具体的产品 
    public static ConcreteProduct getProduct(){
           return new ConcreteProduct ();
    }
}

具体产品类:

public class ConcreteProduct {
    public ConcreteProduct (){}
}

(三)工厂角色与抽象产品角色合并

抽象产品角色作为具体产品的工厂,可以创建出各种具体产品,最典型的例子就是JAVA Api中 DataFormat ,它是一个抽象类,提供了很多的静态方法,如getDateInstance()返回一个具体的时间类如SimpleDateFormat,getDateInstance()做了两件事情:(1)运用多态性,因为SimpleDateFormat是DataFormat的一个子类 (2)使用静态工厂方法 ,内部调用子类SimpleDateFormat的构造器

(四)简单工厂模式的优缺点

优点:模式的核心是工厂类,这个类必须含有必要的判断逻辑,以达到创建哪一种具体产品的目的。消费者不需要负责产品的创建,只需要负责消费产品。simple factory通过这种做法实现了对责任的分割

缺点:当产品类具有多层次的机构关系时,需要在工厂类中加入大量的判断逻辑,使得工厂类的复杂度会很高,不易于维护!

这一缺点会在工厂方法模式中得以克服,敬请关注工厂模式2 工厂方法模式! 

http://blog.csdn.net/zj_1395201/article/details/6648464

如有疑问或者不同见解的读者请与我联系,互勉!

设计模式(创建型)之简单工厂模式(Simple Factory Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN。因为CSDN也支持MarkDown语法了,牛逼啊!概述简单工厂模式(Simple Factory Pattern)又叫...
  • yanbober
  • yanbober
  • 2015年04月27日 16:35
  • 2740

JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)

在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。但是在一些情况下, new操作符直接生成对象会带来一些问题。举例来说, 许多类型对象的创造需要一...
  • jason0539
  • jason0539
  • 2014年04月07日 17:36
  • 221776

Android设计模式之工厂模式 Factory

一.概述 平时做项目跟使用第三方类库的时候经常会用到工厂模式.什么是工厂模式,简单来说就是他的字面意思.给外部批量提供相同或者不同的产品,而外部不需要关心工厂是如何创建一个复杂产品的过...
  • l2show
  • l2show
  • 2015年08月23日 16:25
  • 20134

java设计模式(1):简单工厂模式(Simple Factory)

 中工厂模式又分为三类 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory) 这三种模...
  • u010497280
  • u010497280
  • 2014年08月18日 08:31
  • 344

大话设计模式c++实现1——简单工厂模式 Simple Factory Pattern

问题:实现一个计算器控制台程序。 编程初学者会直觉地用计算机能够理解的逻辑来描述和表达解决问题的具体求解过程,这其实是用计算机的方式去思考。比如计算器程序,小要求输入两个数和运算符号,然后根据运算符号...
  • JarvisKao
  • JarvisKao
  • 2017年03月22日 11:05
  • 264

java设计模式(1):简单工厂模式(Simple Factory)

设计模式主要分三个类型:创建型、结构型和行为型。 工厂模式属于创建型的设计模式 工厂模式主要是为创建对象提供过渡接口,以便创建对象具体过程屏蔽隔离起来,达到提高灵活性的目的。 其中工...
  • lwj0310
  • lwj0310
  • 2014年04月25日 17:36
  • 769

设计模式(1):简单工厂模式(Simple Factory Pattern)

1. 从一个简单的例子开始在众多的设计原则中,有一条原则是这么说的:要针对接口编程,不要针对实现编程。 针对接口编程的话,可以使用不同的实现类来创建这个对象。比如需要一个List:List list...
  • u012877472
  • u012877472
  • 2017年03月13日 22:07
  • 227

极速理解设计模式系列:3.简单工厂模式(Simple Factory Pattern)

四个角色:抽象产品(Product)、具体产品(Concrete Product)、工厂(Creator)、客户端(Client)          抽象产品(Product):需要创建的各种产品的...
  • zydsk0126
  • zydsk0126
  • 2013年12月25日 15:25
  • 676

设计模式在cocos2d-x中的使用--简单工厂模式(Simple Factory)

什么是简单工厂模式? 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个...
  • oktears
  • oktears
  • 2014年06月29日 15:40
  • 2159

软件设计模式——简单工厂模式(Simple Factory)

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于...
  • Jungle_hello
  • Jungle_hello
  • 2016年04月13日 21:40
  • 556
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式第一篇 工厂模式(1) 简单工厂模式simple factory
举报原因:
原因补充:

(最多只允许输入30个字)