工厂的浅谈

什么是工厂

工厂是一个用来创建其它对象的对象。工厂对象通常包含一个或多个方法,用来创建这个工厂所能创建的各种类型的对象。工厂是构造方法的抽象,工厂可以通过各种方式来创建一个对象,并完成复杂的初始化过程或者其它操作。为什么要使用工厂模式说到工厂模式,都会首先说简单工厂模式,虽然之前看过了很多的例子但是我一直没弄明白到底为什么要使用简单工厂模式?你说道理我也背下来了:什么定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。大部分的例子也跟我下面的所差无几,各种蹩脚的比喻,什么汽车水果巴拉巴拉的,完全感受不到引入简单工厂模式可以带来哪些好处简单工厂模式
interface Letter {}class A implements Letter {}class b implements Letter {}public class FactoryDemo { private static Letter getBean(String type { Letter result = null; if (“A”.equals(type)) { result = new A(); } if (“B”.equals(type)) { result = (Letter) Class.forName(type).newInstance(); } return result; }}
但如果创建对象不仅仅只是一个new的过程呢?比如JDBC的Connection,或者说业务上的某一个复杂对象,创建一个对象需要复杂的初始化工作呢?并且根据条件不同,初始化的工作也不同,我们会在用到这个对象的地方每次都去创建嘛?还是会选择把创建的复杂过程封装起来,通过调用来直接获取对象?再或者说就是头铁,我就要一遍一遍的复制粘贴,那如果某一天需求变了,你需要把所有创建对象的地方修改一遍嘛?这时候咱们回头来看工厂,上面咱说道:工厂是构造方法的抽象,我个人理解,工厂是相当于把散落在代码各处的new操作给收集起来,并且可以根据参数不同来生成不同的对象或者选择不同的装配方案,看到这有没有感觉似曾相识?这不就是IOC嘛?没错!还有我们常用的池化技术,工厂只管返回一个对象,这个对象甚至可以不是生成的,再扩大一点范围,大家所熟知的单例模式,也是工厂的应用。明白了为什么要使用工厂模式,再来理解工厂方法模式就很简单了* 工厂方法可以隐藏创建对象的细节,且不一定每次都会真正创建,完全可以返回缓存的对象* 总是引用接口而非实现类,能允许变换子类而不影响调用方,即尽可能面向抽象编程简单工厂模式并不属于23中设计模式,并且简单工厂模式违反了开闭原则,因为如果设计变更,想要让工厂还能够返回一个新的实现类,我们需要添加一段if else这并不友好,所以就有了我们今天的工厂方法模式工厂方法模式
//定义一个对象的抽象interface Letter {}//抽象的具体实现class A implements Letter {}class b implements Letter {}//定义一个工厂的抽象interface Factory { Letter CreateLetter();}//抽象工厂的具体实现class AFactory implements Factory { @Override public Letter CreateLetter() { //大家可以脑补new之前做了茫茫多的工作 return new A(); }}class BFactory implements Factory { @Override public Letter CreateLetter() { return new B(); }}public class FactoryDemo { private static Letter getBean(String type) { Factory factory = (Factory) Class.forName(type).newInstance(); return factory.CreateLetter(); }}
这样的话,我们如果需要工厂有新的抽象类的实现的创建或者装配策略,我们只需要往工程里添加一个新的工厂实现和新的抽象类的实现就可以了,不需要修改FactoryDemo的代码了,符合开闭原则以下这几种情况应该考虑使用工厂方法* 创建对象需要大量重复的代码* 创建对象需要访问某些信息,而这些信息不应该包含在类中* 创建对象的生命周期必须集中管理,以保证在整个程序中具有一致的行为

工厂模式

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值