设计模式之简单工厂——Simple Factory

     简单工厂模式(Simple Factory)

       文字摘自《研磨设计模式》

1、 简单工厂的定义:

提供一个创建对象实例的功能,而无需关心其具体实现。被创建的实例的类型可以是接口、抽象类、也可以是具体的类。

2、 模型图:

设计模式之简单工厂——Simple Factory_第1张图片

Api:定义客户所需要的功能接口。

Impl:具体实现Api的实现类,可能会有多个。

Factory:工厂,选择合适的实现类来创建Api接口对象。

Client:客户端,通过Factory来获取Api接口对象,然后面向Api接口编程。

3、 简单工厂的优点:

3、1 帮助封装

简单工厂虽然很简单,但是非常友好地帮助我们实现了组件的封装,然后让组件外部能真正的面向接口编程。

3、2 解耦

通过简单工厂,实现了客户端和具体实现类的解耦。客户端根本就不知道具体是由谁来实现,也不能知道具体是如何实现的,客户端只是通过工厂获取它所需要的接口 象。

4、 简单工厂的缺点:

4、1 可能增加客户端的复杂度

如果通过客户端的参数来选择具体的实现类,那么酒必须让客户端能理解各个参数所代表的具体功能和含义,这样会增加客户端使用的难度,也部分暴露了内部实现,这 情况可以选用可配置的方式来实现。

4、2 不方便扩展子工厂

私有化简单工厂的构造当,使用静态方法来创建接口,也就不能通过写简单工厂类的子类来改变创建接口的方法的行为了。不过通常情况下是不需要为简单工厂创建子 的。

5、 简单工厂的本质:

简单工厂的本质是:选择实现。

6、具体实现:

package org.swinglife.factory;

/***
 * Api接口
 * @author Swing
 *
 */
public interface Api {
	public void operation(String str);
}

package org.swinglife.factory;

/***
 * Api实现类A
 * @author Swing
 *
 */
public class ImplA implements Api {

	@Override
	public void operation(String str) {
		System.out.println("ImplA to say: "+str);
	}

}

package org.swinglife.factory;

/***
 * Api实现类B
 * @author Swing
 *
 */
public class ImplB implements Api {

	@Override
	public void operation(String str) {
		System.out.println("ImplB to say: "+str);
	}

}

package org.swinglife.factory;

public class Factory {

	//私有化构造函数
	private Factory(){}
	
	/***
	 * 创建API的工厂方法,通过传递过来的type类型来决定要创建哪个对象。
	 * @param type
	 * @return
	 */
	public static Api createApi(int type) {
		switch (type) {
		case 1:
			return new ImplA();
		case 2:
			return new ImplB();
		default:
			return null;
		}
		
	}
}

package org.swinglife.factory;

public class Client {
	public static void main(String[] args) {
		Api api = Factory.createApi(2);
		api.operation("hello");
	}
}



你可能感兴趣的:(设计模式,编程,类)