java设计模式之简单工厂设计模式
1.定义
提供一个创建对象实例的功能,而无须关心其具体实现.被创建实例的类型可以是接口,抽象类,也可以是具体的类.
2.认识简单工厂
1).简单工厂的功能:-->可以用来创建接口,抽象类,或普通类的实例
2).静态工厂:-->通常把简单工厂类实现成一个工具类,直接使用静态方法就可以了,也就是说简单工厂的方法通常都是静态的,所以也被称为静态工厂
3).万能工厂:-->一个简单工厂理论上可以用来构造任何对象,所以又称之为“万能工厂”
3.简单工厂的命名
(1)类名建议为“模块名称+Factory”,比如:用户模块的工厂就称为:
UserFactory
(2)方法名称通常为“get+接口名称”或者是“create+接口名称”
(3)不建议把方法名称命名为“new+接口名称”
4.代码实例
接口类:
/**
* 接口类
* @author Administrator
*
*/
public interface Api {
/**
* 接口方法--本例为打印
* @param str 要打印的字符串
*/
public void execute(String str);
}
实现类A:
/**
* 执行者A
* @author Administrator
*
*/
public class ExecuterA implements Api{
@Override
public void execute(String str) {
System.out.println("hello world! i am "+str);
}
}
实现类B:
/**
* 执行者B
* @author Administrator
*
*/
public class ExecuterB implements Api{
@Override
public void execute(String str) {
System.out.println("hello world! i am "+str);
}
}
工厂类:
/**
* 执行者的工厂
* @author Administrator
*
*/
public class ExeFactory {
/**
* 创建execute
* @param exeName 执行者的名字
* @return execute的实例
*/
public static Api buildExe(String exeName) {
if("A".equals(exeName))return new ExecuterA();
if("B".equals(exeName))return new ExecuterB();
return new ExecuterA();//默认创建执行者A
}
}
客户端类:
/**
* 客户端
* @author Administrator
*
*/
public class Client {
public static void main(String[] args) {
ExeFactory.buildExe("A").execute("TomcatA");
ExeFactory.buildExe("B").execute("TomcatB");
}
}
结果:
hello world! i am TomcatA
hello world! i am TomcatB
5.总结
什么时候选择简单工厂?
1).完全的封装具体隔离,外部只能通过接口访问
2).想要对象的集中管理