工厂模式

Posted z8z87878

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了工厂模式相关的知识,希望对你有一定的参考价值。

——-三人行 必有我师

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

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();
    

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

以上是关于工厂模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式--工厂模式

第三式 装饰者模式

一天卖掉20万份的酸菜鱼,是一种怎样的体验?

设计模式--装饰者模式

4.装饰者模式

营销之外,太二由“酸菜鱼”变身“捞金鱼”还缺什么?