HeadFist里面的工厂方法模式读书笔记

上周学习工厂模式:https://blog.csdn.net/LCF_lxf_ldy/article/details/84029328

但是觉得是HeadFirst让人能够更加清楚的了解,看了些许,就做了如下笔记:

1、使用少量具体类,当代码针对接口而写,可通过多态,让任何新类实现该接口。

2、通过由一种固定的pizza,衍生出来口味各有千秋的Cheese,Greek口味的披萨,当越来越多的口味需要被满足,在orderStory里面就会不断的修改创建代码来产生不同pizza,违反了开放闭合原则。这时候就需要找出变化的代码和不变的代码,将变化的代码封装起来放到一个对象上,新的对象即为“工厂”,专门处理创建对象的细节,只管如何创建Pizza。

3、工厂里面有对外提供实例化对象的方法。

4、在需要创建实例的地方加上工厂的引用,在构造器中需要一个工厂作为参数,通过方法来创建想要的对象。这样就没有具体实例化操作而是使用工厂对象的方法。

5、其中PizzStory可以通过工厂的方法取得披萨的实例,而SimplePizzaFactory里面会将createPizza声明为静态的,有一个抽象类Pizza,实现一些方法,子类会实现这个超类的某个方法。

将客户端的代码和创建实例化的代码隔离,这样的代码具有扩展性,不是只有一个客户能够创建。

6、工厂方法模式通过让子类决定该创建的对象是什么,来达到对象创建的过程封装的目的。

7、产品的“实现”和“使用”应该是解耦的

8、使用静态常量和枚举(enum)可以避免字符串传入参数传错。

9、简单工厂把全部的事情,在一个地方处理完了,然而工厂方法确是一个框架,让子类决定要如何实现。

10、要依赖抽象,不要依赖具体类(依赖倒置原则)

11、指导方针:

         a :变量不可以持有具体类的引用(使用new就会持有具体类)

          b:不要让类派生自具体类(避免依赖,派生抽象)

          c:不要覆盖基类中已经实现的方法(基类已实现的方法,应该由所有子类共享)

12、接口和超类的区别

     a、接口是做什么,类是怎么去做

     b、接口是抽象类的更上层,抽象类里面的方法可实现,可抽象,但是接口的方法都是抽象的,不可以实现

     c、接口可以多实现,而类是单继承的

     d、接口的基本类型是static的,而抽象类不是,为什么是static的因为被定义为static的常量可以随类的加载而存在,接口是没有实例化对象的,要是没有用static修饰的常量是属于类的,接口就拥有不了。

猜你喜欢

转载自blog.csdn.net/LCF_lxf_ldy/article/details/84224801