工厂方法模式

来源:互联网 发布:unity3d project 编辑:程序博客网 时间:2024/06/15 03:24

工厂方法模式

工厂方法模式是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。
定义一个抽象工厂和抽象产品,根据实际情况实例化具体的工厂就可获得的相应的产品。

具体角色

抽象工厂(Creator)角色:工厂方法模式的核心,任何在模式中创建对象的工厂类必须实现这个接口。
具体工厂(Concrete Creator)角色:实现抽象工厂的具体工厂类,受到应用程序调用产生具体产品对象。
抽象产品(Product)角色:产品对象的共同父类或共同接口。
具体产品(Concrete Product)角色:实现了抽象产品的具体产品类。具体产品都有专门的具体工厂创建。
这里写图片描述

例:

需求:

现在有志愿者和学生都帮忙打扫卫生。

代码实现:

抽象工厂

/** * 工厂方法模式 * 抽象工厂角色:帮助者工厂 * 定义创建帮助者的方法 */public interface HelperFactory {    Helper createHelper();}
抽象产品/** * 工厂方法模式 * 抽象产品角色:帮助者 * 定义帮助的方法 */public interface Helper {    void cleanHome();}

具体工厂

/** * 工厂方法模式 * 具体工厂角色:志愿者帮助者工厂 * 创建志愿者帮助者 */public class VolunteerHelperFactory implements HelperFactory{    @Override    public Helper createHelper() {        // TODO Auto-generated method stub        return new VolunteerHelper();    }}
/** * 工厂方法模式 * 具体工厂角色:学生帮助者工厂 * 创建学生帮助者 */public class StudentHelperFactory implements HelperFactory{    @Override    public Helper createHelper() {        // TODO Auto-generated method stub        return new StudentHelper();    }}

具体产品

/** * 工厂方法模式 * 具体产品角色:学生帮助者 *  */public class StudentHelper implements Helper{    @Override    public void cleanHome() {        // TODO Auto-generated method stub        System.out.println("偶尔帮忙打扫家里卫生");    }}
/** * 工厂方法模式 * 具体产品角色:志愿者帮助者 *  */public class VolunteerHelper implements Helper {    @Override    public void cleanHome() {        // TODO Auto-generated method stub        System.out.println("长期帮忙打扫家里卫生");    }}

客户端

public class Client {    public static void main(String[] args) {        HelperFactory helperOneFactory=new StudentHelperFactory();        Helper helperOne=helperOneFactory.createHelper();        helperOne.cleanHome();        HelperFactory helperTwoFactory=new VolunteerHelperFactory();        Helper helperTwo=helperTwoFactory.createHelper();        helperTwo.cleanHome();    }}