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

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

什么是简单工厂模式?

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

那么在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() {
Api api = null ;
InputStream resourceAsStream = null ;
Properties properties = new  Properties();
try  {
resourceAsStream  = Factory. class . getResourceAsStream ( "properties.properties" );
properties .load( resourceAsStream );
} catch  (IOException e ) {
// TODO  Auto-generated catch block
e .printStackTrace();
} finally  {
try  {
resourceAsStream .close();
} catch  (IOException e ) {
// TODO  Auto-generated catch block
e .printStackTrace();
}
}
try  {
api = (Api)Class. forName ( properties .getProperty( "class" )).newInstance();
} catch  (InstantiationException e ) {
// TODO  Auto-generated catch block
e .printStackTrace();
} catch  (IllegalAccessException e ) {
// TODO  Auto-generated catch block
e .printStackTrace();
} catch  (ClassNotFoundException e ) {
// TODO  Auto-generated catch block
e .printStackTrace();
}
return   api ;
}
}
简单工厂的本质就是:选择实现

什么时候用呢?

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

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


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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值