简单工厂模式-Simple Factory Pattern

基本概念

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

结构图

简单工厂模式-Simple Factory Pattern_第1张图片

上图摘自http://www.tutorialspoint.com/design_pattern

应用场景

当需要工厂类负责创建的对象比较少,并且客户端只关心传入工厂类的参数,对于创建对象的逻辑并不关心的时候,可以使用简单工厂模式。

源码示例

1.创建一个Shape接口

package com.spook.simplefactory;

/**
 * Shape接口
 */
public interface Shape {
	public void draw();

}
2.创建Circle类

package com.spook.simplefactory;

/**
 * Circle类
 */
public class Circle implements Shape {

	@Override
	public void draw() {
		// TODO Auto-generated method stub
		System.out.println("draw Circle");
	}

}
3.创建Rectangle类

package com.spook.simplefactory;

/**
 * Rectangle类
 */
public class Rectangle implements Shape {

	@Override
	public void draw() {
		// TODO Auto-generated method stub
		System.out.println("draw Rectangle");
	}

}
4.创建Square类

package com.spook.simplefactory;

/**
 * Square类
 */
public class Square implements Shape {

	@Override
	public void draw() {
		// TODO Auto-generated method stub
		System.out.println("draw Square");
	}

}
5.创建枚举类ShapeType

package com.spook.simplefactory;

/**
 * Shape类型枚举
 */
public enum ShapeType {
	CIRCLE, RECTANGLE, SQUARE;
}
6.创建工厂类

package com.spook.simplefactory;

/**
 * 图形工厂类
 */
public class ShapeFactory {

	public Shape getShape(ShapeType type) {
		switch (type) {
		case CIRCLE:
			return new Circle();

		case RECTANGLE:
			return new Rectangle();

		case SQUARE:
			return new Square();

		default:
			return null;
		}
	}

}
7.测试类

package com.spook.simplefactory;

/**
 * 测试类
 */
public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ShapeFactory shapeFactory = new ShapeFactory();

		Shape circle = shapeFactory.getShape(ShapeType.CIRCLE);
		circle.draw();

		Shape rectangle = shapeFactory.getShape(ShapeType.RECTANGLE);
		rectangle.draw();

		Shape square = shapeFactory.getShape(ShapeType.SQUARE);
		square.draw();
	}

}
运行测试类输出如下内容: 

draw Circle
draw Rectangle
draw Square

备注

简单工厂其实是违反了开放-封闭原则的,比如上面的例子,需要增加一个Triangle类,那么工厂类也得做对应修改,因此一般该模式只在很简单的情况下应用。也正为简单工厂模式的缺陷,才会有工厂方法等其他模式。


你可能感兴趣的:(设计模式,简单工厂模式)