工厂设计模式的原则
在对象中,如果要频繁根据条件,创建某类对象,就应该使用工厂设计模式。把创建这类对象的代码(可能变化的代码),与使用这些代码的(客户端)使用端,分离。
同时,使用了工厂模式,代替new的操作。相当于在引用与对象之间,加了一层缓冲,使得代码的结构更加灵活。
工厂设计模式分为
以上三种的核心思想:其实都是讲可能会变化的new的操作,与不变化使用端的代码进行分离。
案例:一间肠粉店卖肠粉专做外卖,一份肠粉的流程是:
如果现在要做一个小程序,实现上面的功能,要怎么设计类?

public class CDF {
    String getType(){
        return "egg";
    }
    void createOrder(){
        CF order = null;
        String type = this.getType();
        if(type == "egg") {
            order = new EggCF();
        }else if(type == "pork"){
            order = new PorkCF();
        }else if(type == "beef"){
            order = new BeefCF();
        }else{
            System.out.println("本店无此类肠粉");
            return;
        }
        //开始做单
        order.prepare();
        order.cook();
        order.oil();
        order.box();
        System.out.println("完成订单");
    }
}
按照这种做法,每次添加新的肠粉类,就要修改这个CDF类。显然,把变化的部分抽离,又因为要创建对象所以,可以利用简单工厂。

public class CFfactory {
    public static CF createCF(String type){
        CF order = null;
        if(type == "egg") {
            order = new EggCF();
        }else if(type == "pork"){
            order = new PorkCF();
        }else if(type == "beef"){
            order = new BeefCF();
        }else{
            System.out.println("本店无此类肠粉");
        }
        return order;
    }
}
public class CDF {
    String getType(){
        return "pork";
    }
    void createOrder(){
        CF order = CFfactory.createCF(this.getType());
        //开始做单
        order.prepare();
        order.cook();
        order.oil();
        order.box();
    }
}
这样左后,就算添加了新的类型,只要修改factory的代码,和添加一个新的类型就可以。
同时,如果有多个使用端同时需要CF对象,那么只需要集中修改工厂,不要修改其他的使用端代码。
原文:https://www.cnblogs.com/custoyth/p/13267962.html