抽象工厂的分析与解决.abstract factory

先展开一个案例吧.网上有人用快餐和厨师来举例,我觉得挺好.
问题:现在我要做两个套餐,北方人的风味和南方人的风味,
每个套餐都要有面,汤和饭,但是北方人吃的面,汤和饭和南方人的都不一样,北方人要辣,南方人要淡一点,我们把这些对象,依次定义在下面:

北方人套餐的类:northnuddle,northrice,northsoap;
南方人套餐的类是: sourthnuddle,sourthrice,sourthsoap;

在没有引入这个方法之前,我们要得到一个北方人套餐的话我们操作如下;

northnuddle nn =new northnuddle();

northrice nr=new northrice();

northsoap ns=new northsoap();

 

南方人的套餐:

 

我就不写了.

 

到这里大家发现了问题,就是如果写下去的话,南方人的代码,几乎相同.

 

那我们现在想怎么解决这个问题.

 

1.        建一个方法,让这个方法(用字符串或整形来做参数,将这些方法封装到一个函数里)

makefood(string 套餐)

if  套餐==’

{ northnuddle nn =new northnuddle();

northrice nr=new northrice();

northsoap ns=new northsoap();}

 

……..

 

这样是我们通常想到的方法,但这种方法一看就是一种简单工厂的处理方法,利用特定参数来传值,有更好的方法吗,当然有.

 

就是将厨师拿出来作为一个接口:因为我们要做的事情就三样,做饭,做汤,做面条.

 

这个动作,两种风味的厨师都要做,这就是共性.

 

所以就出现了厨师接口.

 

Public interface chef

 {

  noodle: makenoodle;

  rice: makerice;

soap:makesoap;}

 

用两个子类,北方厨师和,南方厨师去继承它,来实现这些动作.

 

Class northchef:chef;

   Public makenoddle()

{ return =new makenoddle();

}

 

Class sourthchef:chef;

 

然后在makenoodle的函数中去构造北方的面条或南方的面条.

这下我们就将套餐交给(厨师)这个抽象工厂做了.至于它怎么做的,我们不用管了.

反正北方的厨师做的是北方的套餐,南方师父做的南方的套餐.

 

调用的方式如下.

Chef northChef=new NorthChef();
       northChef.MakeNoodle();
       northChef.MakeRice();
       northChef.MakeBread();
  
       Chef southChef=new SouthChef();
       southChef.MakeBread();
       southChef.MakeNoodle();
       southChef.MakeRice();



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值