工厂模式
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();
这个时候,吃那个牌子就由你自己来决定了是不是. 这样子虽然不是静态方法,但是我们可以把我们的工厂做成单例也差不多效果是吧.
以上是关于工厂模式的主要内容,如果未能解决你的问题,请参考以下文章