目录
前言
正文
工厂模式(概念性知识)
作用
分类
个人思考之简单工厂模式
在看了三遍概念,结合书之后,我对简单工厂模式的作用有了一个初步理解。
个人思考之工厂方法模式
结言
前言
学习《大话设计模式》,想把自己的想法记在这里,如有错误(必有疏漏),还请路过的朋友们指教,感谢!
正文
工厂模式(概念性知识)
作用
实现了类创建者和调用者的分离。
分类
?? ?简单工厂模式 ?? ??? ?用来生产同一等级结构中的任意产品(对于增加新的产品,需要扩展已有代码),一个工厂 ?? ??? ?对比工厂方法 ?? ??? ??? ?代码简单 ?? ??? ??? ?编程简单 ?? ??? ??? ?管理简单 ?? ??? ??? ?结构简单 ?? ??? ?根据实际业务,我们一般会选择简单工厂模式 ?? ?工厂方法模式 ?? ??? ?用来生产同一等级结构中的固定产品(支持增加任意产品),不过每一个类都有对应的工厂类,每加一个都要写个工厂类 ?? ??? ?根据设计原则,我们会选择工厂方法模式。
个人思考之简单工厂模式
在看了三遍概念,结合书之后,我对简单工厂模式的作用有了一个初步理解。
以Car类为例。我先创建一个Car接口。
然后分别创建BenChi类和BaoMa类来实现这个接口。
?
?然后新建Factory类
最后在Tes类中测试
?代码能够正常运行,我认为上文中对简单工厂模式的介绍
(?用来生产同一等级结构中的任意产品(对于增加新的产品,需要扩展已有代码),一个工厂)
这里面的任意产品的任意应该就是体现在我的getCar(String s) 里面的字符串,
我输入宝马它就实例化宝马类的getCar()方法,奔驰就是奔驰的。当然我认为参数是可以很多类型的,就看工厂类中的判断逻辑了。 如果我要增加新的车的话,我需要再写Car接口的实现类,然后在工厂类的判断逻辑中加入它。看起来还好,挺好用的。
个人思考之工厂方法模式
给的定义是:用来生产同一等级结构中的固定产品(支持增加任意产品),不过每一个类都有对应的工厂类,每加一个都要写个工厂类。
还是以刚刚的Car为例,首先Car接口和它的两个实现类(BaoMa和BenChi)都要有的(同上),它不再是一个工厂类来执行逻辑操作,而是每一个实现类都有一个自己的工厂,这无疑是增加代码量的环节。不过那么多的工厂我觉得也可以来一个接口,先把我的每个新代码贴上来。
?
?
引用一下书中原话(下图)。客户端在这应该和我的Test一样。你想要加产品,就要加那个产品类和它的工厂类,然后在客户端中调用就好了,这和简单工厂模式的区别就是下图中从“也就是说”后面。
实际应用场景中一般使用的是简单工厂模式,因为没有大的代码量,不过它违背了开放-封闭原则(对扩展开放,对修改关闭),从这一点上来看工厂方法模式更好,另外工厂方法模式保留了封装创建对象的优点。
后面大鸟提到了可以用反射解决分支判断的问题,我似懂非懂,因为在JDBC连接池那里好像就用到了,要用到泛型和反射。
结言
真的是基础中的基础,后面投入到实践中肯定不会像我这么简单的,我还得好好练练。
|