每天一个知识点:2017/9/9:简单工厂模式

来源:互联网 发布:巧克力哪一款好吃知乎 编辑:程序博客网 时间:2024/06/05 10:32

设计模式之简单工厂模式:

什么是简单工厂模式?

简单工厂模式抽象的讲就是现实中的工厂,当你需要买东西的时候不用自己去生产这个东西,只需要知道到那个工厂去,你就能得到这个东西,你不需要他是如何生产的,也不需要他的内部结构,只知道怎么获得就可以了。

那么在java中我们怎么实现工厂呢?

//接口
public interface Api {
vpid seyHello();
}

//实现

public class ApiImpl1 implements Api{

@Override

public vpid sey Hello(){

System.out.println("我是产品1");

}

}

//实现

...

System.out.println(“我是产品2”);

...

//工厂

public class ApiFactory{

private ApiFactory(){}

public static Api getApiImpl1(){

return new ApiImpl();

}

}

//客户端

public class Clien{

public static void main(String[] args{

ApiFactory.getApiImpl1().seyHello();

}

}

上面的办法就实现了一个简单工厂。

没有工厂的时候我们又是怎么做的呢?

我们是这样做的!

public class Clien{

public static void main(String[] args){

Api api=new ApiImpl();

api.seyHello();

}

}

想一想不用的患处是什么?

相当于客户端直接已经知道了实现的细节,而且还准确的知道了这个方法是用来干什么的,那么如果方法发生了改变,我们是不是还要修改客户端呢?


使用工厂创建我们需要的内容有3种:

1.通过客户端的选择来产生

2.通过配置文件的方式来产生

3.通过程序运行时来选择产生

用工厂创建实例的方式最好是通过读取配置文件,这样达到了可插拔,不用改变任何代码,就可以直接使用功能,只需要修改一下配置文件。
public class Factory {
private Factory() {
}
public static Api getApiImpl() {
Apiapi=null;
InputStreamresourceAsStream=null;
Propertiesproperties=new Properties();
try {
resourceAsStream = Factory.class.getResourceAsStream("properties.properties");
properties.load(resourceAsStream);
}catch (IOExceptione) {
//TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
resourceAsStream.close();
}catch (IOExceptione) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
try {
api= (Api)Class.forName(properties.getProperty("class")).newInstance();
}catch (InstantiationExceptione) {
//TODO Auto-generated catch block
e.printStackTrace();
}catch (IllegalAccessExceptione) {
//TODO Auto-generated catch block
e.printStackTrace();
}catch (ClassNotFoundExceptione) {
//TODO Auto-generated catch block
e.printStackTrace();
}
return api;
}
}
简单工厂的本质就是:选择实现

什么时候用呢?

1.当想要对客户端进行完全封装隔离具体实现,让外部只能通过接口来调用封装体,可以选择使用简单工厂。

2.如果想要吧创建对象和管理对象集中起来控制的时候也可以使用简单工厂模式。


----------------------------------------------------------------------------------------------让我们一起学习,一起进步-----------------------------------------------------------------------------------------------------

原创粉丝点击