设计模式学习笔记(二)
工厂方法模式(Factory Method Pattern)
所谓工厂方法模式(Factory Method Pattern),就是定义一个i额创建产品对象的工厂接口,让子类决定实例化哪一种实例对象,也就是将实际创建对象的工作推迟到子类当中,核心工厂类不再负责具体产品的创建。
设计原则
1.“开-闭”原则
首先了解一个软件设计的原则——“开-闭”原则。所谓“开-闭”原则,就是指一个软件实体应对扩展开发,对修改关闭.它所阐述的意思就是,在设计一个软件模块的时候应该使这个模块可以在不被修改的前提下被扩展.
“开-闭”原则具有以下优势:
(1)通过已有的系统扩展自身的行为,从而满足新的软件需求,具有一定的适应性和灵活性.
(2)原有的软件逻辑不被修改,保证了原系统和新系统的稳定性。
工厂方法模式很好地阐述了“开-闭”原则,工厂方法模式的抽象,让子类决定实例话哪一种实例对象,具有很大的适应性和灵活性:具体产品对象是在子类工厂中产生的,没有修改任何父类工厂的代码,因此保证了系统的稳定性.
2.依赖倒置原则
所谓的依赖倒置原则,就是不论工厂还是产品都应该依赖于抽象,而不是具体的实现类.更像是“针对接口编程,而不是针对实现编程”,但是这里的“依赖倒置原则”更强调“抽象”的概念,不要让高层组件依赖底层组件,更不能依赖具体实现类,都要依赖于抽象.
面向过程: 高层组件---------->低层组件
面向对象: 一般情况下抽象的变化概率很小,让用户程序依赖于抽象,实现的细节也依赖于抽象.即使实现细节不断变动,只要抽象不便,客户程序就不需要变化.这大大降低了客户程序与实现细节的解耦度. 高层组件---------->抽象组件<-----------底层组件.这样一来,无论底层组件怎么样变化,只要抽象组件不发生改变,高层组件就不会发生变化,实现了客户程序与实现细节的解耦.
在工厂方法模式中,存在这样几个角色:
1).抽象工厂
2).抽象产品
3).具体工厂
4).具体产品
我们可以理解工厂方法设计模式:
(1)抽象工厂产生抽象产品,具体工厂产生具体产品
(2)抽象对具体
使用场合:
1)当子类型可能有很多,以后需要不断增添不同的子类实现时;
2)当一个系统尚在框架设计阶段,还不知道将来需要实例化哪些具体对象时;
3)系统设计之初不需要具体对象的概念
Java SDK中的工厂方法模式