1:经典的例子,披萨-工厂
简单工厂思路:从工厂类得到一个原始披萨,然后经过:准备prepare、烘焙bake、切片cut、装盒box,即可形成一个美味的披萨。
2:使用静态工厂(利用静态方法)的好处?坏处?
好处:不需要使用创建对象的方法来实例化对象。
坏处:不能通过继承来改变创建方法的行为。
3:对象组合可以在运行时动态改变行为,因为我们可以更换不同的实现。
4:使用简单工厂的披萨店示例:
下图可以用这么一句话理解:披萨店通过披萨工厂获取一种类型的披萨实例。
5:提醒一下,重要的事需要不断提醒?
在设计模式中,所谓的“实现一个接口”并“不一定”表示写一个类,并利用Implement关键词来实现摸个Java接口。
“实现一个接口“泛指”实现某个超类型(可以是类或接口)的某个方法“。
6:上面的步骤4使用的是简单工厂的形式创建披萨店。当然了,也可以通过工厂方法来实现。接下来就详细说一下
我们的工厂方法模式哈,gogogo~~~
7:定义工厂方法模式
披萨店的例子说明一下:
8:理解简单工厂和工厂方法之间的区别?
简单工厂把全部的事情,在一个地方都处理完了。然而工厂方法却是创建一个框架,让子类决定要如何实现。仔细思考这句话。
9:学到的设计原则:依赖倒置原则
解释一下:这个原则听起来像”针对接口编程,不针对实现编程“,的确很相似,但是这里更强调”抽象“。
这个原则说明了:不能让高层组件依赖底层组件,而且,不管是高层组件还是底层组件,”两者“都应该
依赖抽象。
10:接下来讲解抽象工厂,哈哈哈
原料家族:生产芝加哥披萨菜单上的披萨和生产纽约比萨菜单上的披萨所用的原料,可能根据当地提供,会有所不同(也就是说:芝加哥和纽约提供的披萨产品家族相同,但是制作原料不同),怎么设计??
针对上图芝加哥披萨菜单和纽约披萨菜单,继续剖析:
11:定义抽象工厂
从PizzaStore例子来看看:
12:讲讲工厂方法和抽象工厂对比?
(1)细心观察可以发现,抽象工厂的每个方法实际上看起来都像是工厂方法。
(2)大家都负责创建对象,但是工厂方法用的方法是继承,而抽象工厂是通过对象的组合实现。
(3)利用工厂方法创建对象,需要扩展一个类,并覆盖它的工厂方法。
(4)还是用披萨店的例子,对比一下区别,上面的文章已经说过了,不再赘述,哈哈哈~~~
13:还是披萨店例子,分别画出简单工厂、工厂方法、抽象工厂的具体实现类图
(1)简单工厂
(2)工厂方法
(3)抽象工厂