设计模式(1)------工厂方法模式
来源:互联网 发布:精通c语言薪水有多少 编辑:程序博客网 时间:2024/06/10 23:03
工厂模式作用:
工厂模式(factory pattern)是一种常用的对象创建型设计模式,是用工厂方法代替new操作的一种模式。
定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使得一个类的实例延迟到其子类。
我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,
所以以后new时就要多个心眼,但是可以考虑使用工厂模式,虽然这样做,可能多做一些工作,
但会给你系统带来更大的可扩展性和尽量少的修改量。
应用场景:
(1)当一个类希望由它的子类来指定它所创建的对象的时候。
(2)当一个类不知道自己必须创建哪些对象的时候。
参与对象:
抽象工厂(Creator)角色:是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。
具体工厂(Concrete Creator)角色:这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。
抽象产品(Product)角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。
具体产品(Concrete Product)角色:这个角色实现了抽象产品角色所定义的接口。某具体产品有专门的具体工厂创建,它们之间往往一一对应。
具体产品(Concrete Product)角色:这个角色实现了抽象产品角色所定义的接口。某具体产品有专门的具体工厂创建,它们之间往往一一对应。
工厂模式分为工厂方法(Factory Method),抽象工厂(Abstract Factory)。
这里主要说工厂方法模式。eg:
类图:
product
package com.lanhuigu.base.design.create.FactoryMethod;/** * * @ClassName: Work * @Description: 定义工厂方法所创建的对象接口 */public interface Work {void doWork();}
Concrete Product
package com.lanhuigu.base.design.create.FactoryMethod;/** * * @ClassName: StudentWork * @Description: 实现接口对象为具体对象 */public class StudentWork implements Work {@Overridepublic void doWork() {// TODO Auto-generated method stubSystem.out.println("学生做作业");}}
package com.lanhuigu.base.design.create.FactoryMethod;/** * * @ClassName: TeacherWork * @Description: 实现接口对象为具体对象 */public class TeacherWork implements Work {@Overridepublic void doWork() {// TODO Auto-generated method stubSystem.out.println("老师批改作业");}}
Creator
package com.lanhuigu.base.design.create.FactoryMethod;/** * * @ClassName: IWorkFactory * @Description: 定义创建对象的工厂方法--由具体子类实例化对象 */public interface IWorkFactory {Work getWork();}
Concrete Creator
package com.lanhuigu.base.design.create.FactoryMethod;/** * * @ClassName: StudentWorkFactory * @Description: 实例化学生工作对象,返回学生工作对象 */public class StudentWorkFactory implements IWorkFactory {@Overridepublic Work getWork() {// TODO Auto-generated method stubreturn new StudentWork();}}
package com.lanhuigu.base.design.create.FactoryMethod;/** * * @ClassName: TeacherWorkFactory * @Description: 子类从工厂中实例化老师工作对象 */public class TeacherWorkFactory implements IWorkFactory {@Overridepublic Work getWork() {// TODO Auto-generated method stubreturn new TeacherWork();}}
Test
package com.lanhuigu.base.design.create.FactoryMethod;public class FactoryMethodTest {//mainpublic static void main(String[] args) {StudentWorkFactory studentWorkFactory = new StudentWorkFactory();studentWorkFactory.getWork().doWork();TeacherWorkFactory teacherWorkFactory = new TeacherWorkFactory();teacherWorkFactory.getWork().doWork();}}
运行结果
0 0
- 设计模式(1)------工厂方法模式
- 设计模式(1)--工厂方法模式
- 设计模式(1)-工厂方法模式
- 设计模式解读之 简单工厂模式&工厂方法模式&抽象工厂模式(1)
- 设计模式-java工厂模式1(简单工厂模式+工厂方法模式)
- C++设计模式之1-工厂模式(简单工厂模式-工厂方法模式-抽象工厂模式)
- 设计模式(1) - 工厂方法
- 设计模式-1-工厂方法
- 工厂方法(设计模式)
- 设计模式(工厂方法)
- 设计模式(工厂方法)
- 设计模式--工厂模式(工厂方法、抽象工厂)
- 设计模式 - 工厂模式(简单,工厂方法,抽象工厂)
- Java设计模式--工厂模式(简单工厂+工厂方法)
- Java设计模式-工厂模式(简单工厂+工厂方法)
- 设计模式(二)工厂方法模式+抽象工厂模式
- 设计模式(四)工厂模式-工厂方法模式
- Python设计模式1--工厂方法模式
- 通过打印日志的方式检查BUG & 单例模式类使用前要保证被初始化
- 【1】Android体系与系统架构——Android群英传开发笔记
- (经典)POJ-1631 LIS,偏序问题
- 单片机程序风格和调试技巧(一)
- 关于两个变量值互换问题
- 设计模式(1)------工厂方法模式
- 剑指offer—打印1到最大n位数
- @class
- 《DEBUG HACKS》中文版笔记(二)
- shell脚本下常用的符号组合及转移字符
- HDOJ 1573 X问题 (余数不互质的中国剩余定理)
- android学习笔记(四)__xml和widget
- c语言学习笔记8之if语句
- 计算机网络 ip 子网掩码,子网数学习心得