设计模式之工厂模式

  • A+
所属分类:Java

大学的时候就用过工厂模式了,但那个时候只是图个快速上手,并没有深入理解,最近找工作感觉有必要仔细巩固下常用的设计模式。

工厂模式的介绍

    工厂模式的分类:

        简单工厂模式,又称静态工厂模式。

        工厂方法模式,又称多态性工厂。

        抽象工厂模式,又称工具箱模式。

    为啥使用工厂模式

        解耦、降低代码的重复率,提高代码的复用率、降低维护成本。

简单工厂模式

        定义一个工厂类,根据参数的不同返回不同的实例,被创建的实例通常有共同的父类。

1.创建一个Sape接口



/**
 * @author openshell
 * @version 创建时间:2019年4月12日 下午9:17:15
 */
public interface Shape {
	void draw();
}

2.创建实现该接口的具体实现类


/**圆
 * @author openshell
 * @version 创建时间:2019年4月12日 下午9:18:41
 */
public class Circle implements Shape {
	
	public Circle() {
		System.out.println("this is Circle!");
	}

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

}

/**长方形
 * @author openshell
 * @version 创建时间:2019年4月12日 下午9:23:08
 */
public class Rectangle implements Shape {
	
	public Rectangle() {
		System.out.println("this is Rectangle !");
	}

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

	
}

3.创建工厂

/**工厂类
 * @author openshell
 * @version 创建时间:2019年4月12日 下午9:25:23
 */
public class ShapeFactory {
	public static Shape getShape(String s) {
		if(s == null) {
			return null;
		}
	
		if(s.equalsIgnoreCase("circle")) {
			return new Circle();
		}else if(s.equalsIgnoreCase("rectangle")) {
			return new Rectangle();
			
		}
		return null;
		
	}

}

不过这样有个问题,违反了开放-关闭原则软件实体应对扩展开放,而对修改关闭)。

4.使用反射改善简单工厂


/**
 * @author openshell
 * @version 创建时间:2019年4月12日 下午10:33:14
 */
public class ShapeFactory2 {
	
	public static Object getObject(Class<? extends Shape> clazz) {
		Object obj=null;
		try {
			obj=Class.forName(clazz.getName()).newInstance();
			return obj;
		} catch (Exception e) {
			// TODO: handle exception
		}
		return null;
	}
}

工厂方法模式

抽象工厂模式

学习来自:

深入理解工厂模式

《设计模式的艺术:软件开发人员内功修炼之道》简记 

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: