java设计模式(创建型)之工厂方法模式

来源:互联网 发布:db2 删除数据库 编辑:程序博客网 时间:2024/05/29 19:04

第0章:简介

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

工厂方法模式的实质:延迟到子类来选择实现

参考:研磨设计模式(书籍),大话设计模式(书籍)

模式图:

待补充

第1章:实践

(1)接口类(Intf.java)

package com.mcc.core.designPattern.build.simpleFactory;

/**
 * 接口
 *
 * @author <a href="mailto:417877417@qq.com">menergy</a>
 *         DateTime: 14-3-9  上午12:24
 */
public interface Intf {
    public void someMethod();
}

(2)实现类A(IntfImplA.java)

package com.mcc.core.designPattern.build.simpleFactory;

/**
 * 实现类A
 *
 * @author <a href="mailto:417877417@qq.com">menergy</a>
 *         DateTime: 14-3-9  上午12:28
 */
public class IntfImplA implements Intf {
    @Override
    public void someMethod() {
        System.out.println("实现类A");
    }
}

(3)实现类B(IntfImplB.java)

package com.mcc.core.designPattern.build.simpleFactory;

/**
 * 实现类B
 *
 * @author <a href="mailto:417877417@qq.com">menergy</a>
 *         DateTime: 14-3-9  上午12:28
 */
public class IntfImplB implements Intf {
    @Override
    public void someMethod() {
        System.out.println("实现类B");
    }
}

(4)创建器类(Creater.java)

package com.mcc.core.designPattern.build.factoryMethod;

/**
 * 创建器,声明工厂方法
 *
 * 工厂方法模式定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,使一个类的实例化延迟到其子类
 * 工厂方法模式本质:延迟到子类来选择实现
 *
 * @author <a href="mailto:417877417@qq.com">menergy</a>
 *         DateTime: 14-3-9  上午12:49
 */
public abstract class Creater {

    //创建对象的工厂方法,具体由子类实现创建过程
    protected abstract Intf factoryMethod();

    public void otherMethod(){
        System.out.println("工厂方法创建器,需子类实现创建过程");
    }
}

(5)A对象工厂类(FactoryA.java)

package com.mcc.core.designPattern.build.factoryMethod;

/**
 * A对象工厂
 *
 * @author <a href="mailto:417877417@qq.com">menergy</a>
 *         DateTime: 14-3-9  上午12:55
 */
public class FactoryA extends Creater {
    @Override
    protected Intf factoryMethod() {
        //创建A对象
        return new IntfImplA();
    }
}

(6)B对象工厂类(FactoryB.java)

package com.mcc.core.designPattern.build.factoryMethod;

/**
 * B对象工厂
 *
 * @author <a href="mailto:417877417@qq.com">menergy</a>
 *         DateTime: 14-3-9  上午12:59
 */
public class FactoryB extends Creater {
    @Override
    protected Intf factoryMethod() {
        //创建B对象
        return new IntfImplB();
    }
}

(7)客户端测试类(Client.java)

package com.mcc.core.designPattern.build.factoryMethod;

/**
 * 客户端测试
 *
 * @author <a href="mailto:417877417@qq.com">menergy</a>
 *         DateTime: 14-3-9  上午1:02
 */
public class Client {
    public static void main(String args[]){
        //生产A对象
        Intf intfA = new FactoryA().factoryMethod();
        intfA.someMethod();
        //生产B对象
        Intf intfB = new FactoryB().factoryMethod();
        intfB.someMethod();
    }
}





0 0