设计模式(1)------工厂方法模式

来源:互联网 发布:精通c语言薪水有多少 编辑:程序博客网 时间:2024/06/10 23:03

工厂模式作用:

工厂模式(factory pattern)是一种常用的对象创建型设计模式,是用工厂方法代替new操作的一种模式。

定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使得一个类的实例延迟到其子类。

我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,

所以以后new时就要多个心眼,但是可以考虑使用工厂模式,虽然这样做,可能多做一些工作,

但会给你系统带来更大的可扩展性和尽量少的修改量。

应用场景:

(1)当一个类希望由它的子类来指定它所创建的对象的时候。

(2)当一个类不知道自己必须创建哪些对象的时候。

参与对象:

抽象工厂(Creator)角色:是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。

具体工厂(Concrete Creator)角色:这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。

抽象产品(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