工厂模式

——-三人行 必有我师

说到设计的模式,当来离不开我们的工厂了是不是,来,让我们看看康师傅的泡面工厂.做泡面,有很多种类是不是,我们这简单点,就说两种吧,酸菜和牛肉的.做泡面有很多流程,其中和面,油炸,还有最重要的调料包是少不了的,所以我们把这三样做成个接口,做泡面都要实现它

public interface Paomian {

    void hemian();           //和面
    void youzha();           //油炸
    void tiaoliaopao();      //调料包
}

然后我们该开始决定具体怎么做泡面了,老坛酸菜这样做

public class LtscPaomian implements Paomian{  //老坛酸菜

    public void hemian() {
        // TODO Auto-generated method stub
    }

    public void youzha() {
        // TODO Auto-generated method stub
    }

    public void tiaoliaopao() {
        // TODO Auto-generated method stub
        System.out.println("没胃口,吃吃酸菜");
    }   

}

牛肉味的这样做

public class NrwPaomian implements Paomian{  //牛肉味

    public void hemian() {
        // TODO Auto-generated method stub

    }

    public void youzha() {
        // TODO Auto-generated method stub

    }

    public void tiaoliaopao() {
        // TODO Auto-generated method stub
        System.out.println("一种感觉不像肉的东西");
    }

}

好了,规定好了怎么做,我们就要开始做了.但是我们肯定不是单独做啊,这销量我们要有个工厂是不是

public class KsfFactory {   //康师傅工厂

    public Paomian getPaomian(String type){

        if("LtscPaomian".equals(type)){
            return new LtscPaomian();

        }else if("NrwPaomian".equals(type)){

            return new NrwPaomian();

        }else{

            throw new IllegalArgumentException("参数错误");
        }
    }
}

这叫普通工厂,你要什么类型泡面,我就给你什么泡面,来看看测试

public static void main(String[] args) {
        // TODO Auto-generated method stub

        (new KsfFactory()).getPaomian("LtscPaomian").tiaoliaopao();
        (new KsfFactory()).getPaomian("NrwPaomian").tiaoliaopao();
    }

输出

没胃口,吃吃酸菜
一种感觉不像肉的东西

但是像这样子的 普通工厂 我们有时候会填错参数的,所以 多方法工厂 就出现了

public class KsfFactory {   //康师傅工厂

    public Paomian productLtsc(){  //制作老坛酸菜泡面
        return new LtscPaomian();
    }

    public Paomian productNrw(){
        return new LtscPaomian();
    }
}

这样子还是有点不好是不是,因为我们要个泡面我们还要去new个工厂,所以我们也不会这么写.所以我们平常用的更多是静态工厂方法模式

public class KsfFactory {   //康师傅工厂

    public static Paomian productLtsc(){  //制作老坛酸菜泡面
        return new LtscPaomian();
    }

    public static Paomian productNrw(){
        return new LtscPaomian();
    }
}

这个样子就是我们常用的状态了.最后说下抽象工厂模式,我们这样的屁民去买泡面,现在就差不多就两个选择吧,统一和康师傅,当然还有一些存在,基本都是这两家了.它们都有做泡面,但肯定做的不一样是吧.材料之类的等肯定做不到一样的.所以这时候抽象工厂模式就出场了,我们定义一个做泡面的抽象工厂

public abstract class MakePaomianFactory {

    public abstract Paomian getLtscPaomian();
    public abstract Paomian getNrwPaomian();
}

康师傅工厂

public class KsfFactory extends MakePaomianFactory{   //康师傅工厂

    public Paomian getLtscPaomian() {
        // TODO Auto-generated method stub
        return new KsfLtsc();
    }

    public Paomian getNrwPaomian() {
        // TODO Auto-generated method stub
        return KsfNrw();
    }
}

统一工厂

public class TyFactory extends MakePaomianFactory{   //统一工厂


    public Paomian getLtscPaomian() {
        // TODO Auto-generated method stub
        return TyLtsc();
    }

    public Paomian getNrwPaomian() {
        // TODO Auto-generated method stub
        return TyNrw();
    }
}

这个时候,吃那个牌子就由你自己来决定了是不是. 这样子虽然不是静态方法,但是我们可以把我们的工厂做成单例也差不多效果是吧.

你可能感兴趣的:(设计模式,工厂模式)