设计模式学习笔记(四)--工厂模式

[同系列文章]
1.设计模式学习笔记(一)- -策略模式
2.设计模式学习笔记(二)- -观察者模式
3.设计模式学习笔记(三)- –装饰者模式


这一章节内容有点多,虽说不难,但是却容易混淆概念。


简单工厂模式:其实不是一个设计模式,只是一种编程习惯;相当于把重复的new 子类对象抽出来,然后return父类;运行时动态改变行为喔(把某种类型传给工厂,工厂对这个类型进行处理,返回对象)

因为很简单,代码不贴了,直接上图
设计模式学习笔记(四)--工厂模式

设计模式学习笔记(四)--工厂模式

设计模式学习笔记(四)--工厂模式

文章中的提醒:
在设计模式中,所谓的“实现一个接口”,并不一定表示“写一个类,并利用implement关键词来实现某一个接口”。“实现一个接口”泛指:实现某个超类型(可以是接口某个方法)。

书中为了引出工厂模式花了好多功夫,写了好几页,现在正式来认识我们的新伙伴——工厂方法模式以及抽象工厂模式


工厂方法模式的定义:

定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。

偷懒大法,原谅我偷图图): (N天之后过来复习,我应该还会记得的吧…=-=)

以生产出不同口味的披萨为例

1、这个是披萨店,是一个抽象类(接口)

设计模式学习笔记(四)--工厂模式
设计模式学习笔记(四)--工厂模式
2、这个是继承了抽象披萨店类的纽约披萨店(实现)

设计模式学习笔记(四)--工厂模式

3、生产
设计模式学习笔记(四)--工厂模式

4、披萨的基类(抽象类),所有具体披萨都要派生自这个类
设计模式学习笔记(四)--工厂模式
设计模式学习笔记(四)--工厂模式
设计模式学习笔记(四)--工厂模式


抽象工厂模式的定义:

提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

以生产原料的工厂为例:

设计模式学习笔记(四)--工厂模式
设计模式学习笔记(四)--工厂模式
设计模式学习笔记(四)--工厂模式
设计模式学习笔记(四)--工厂模式
设计模式学习笔记(四)--工厂模式
设计模式学习笔记(四)--工厂模式
设计模式学习笔记(四)--工厂模式
设计模式学习笔记(四)--工厂模式


OK,本章以偷懒的方式结束。工厂方法模式和抽象工厂模式不要搞混淆了喔。
再做个总结吧,企图洗清偷懒的嫌疑:)

总结:

抽象工厂模式:

1.创建对象 通过 对象的组合
2.提供一个产品家族的抽象类型,这个类型的子类定义了产品被产生的法法;
3.当需要让 创建产品家族 和 参与制造的相关产品 集合起来时,可以用到它;

工厂方法模式:

1.创建对象用 继承
2.通过子类来创建对象,由子类决定具体类型;
3.把用户端代码 从 需要实例化具体类中解耦~;

OO原则

  1. 多用组合,少用继承
  2. 针对接口编程,不针对实现编程
  3. 为交互对象之间的松耦合设计而努力
  4. 类应该对扩展开放,对修改关闭
  5. 依赖抽象,不需要依赖具体类