前言:我在讲解抽象工厂时发现,这个概念确实够"抽象"的,我讲的抽象,大家听得更抽象,为了把抽象工厂讲清楚明白,我特意虚构了一个案例,献给我的学员们——
阿三创业记:
阿三高考落榜,在家游手好闲,于是有个朋友就数落他,"阿三,你这样连街上卖土豆的都不如!".
阿三又气又恼,心想,"我就这么不争气么?说我连卖土豆的都不如......,土豆,土豆?别瞧不起卖土豆的,行行出状元,我就卖给你看!"
于是阿三就张罗起了他的土豆店,卖起了麻辣土豆.
class 麻辣土豆
{
public void 土豆介绍()
{
Console.WriteLine("我是麻辣土豆!");
}
}
地段不错,买的人也不少:
麻辣土豆 土豆 = new 麻辣土豆();
土豆.土豆介绍();
人的口味是多变的,只是麻辣土豆,产品太单一了,阿三还卖起了"五香土豆".
class 五香土豆
{
public void 土豆介绍()
{
Console.WriteLine("我是五香土豆!");
}
}
小店增加了品种,迎合不同口味的吃客:
麻辣土豆 土豆1 = new 麻辣土豆();
土豆1.土豆介绍();
五香土豆 土豆2 = new 五香土豆();
土豆2.土豆介绍();
阿三卖的土豆远近闻名,无论是麻辣土豆还是五香土豆,味道都巴适的很.
于是,阿三就把他卖的土豆打造成品牌:"阿三牌土豆",该品牌下有两个子产品:
interface IPotato
{
void 土豆介绍();
}
class 麻辣土豆 : IPotato
{
public void 土豆介绍()
{
Console.WriteLine("我是麻辣土豆!");
}
}
class 五香土豆 : IPotato
{
public void 土豆介绍()
{
Console.WriteLine("我是五香土豆!");
}
}
只要客人来了,都说,"买一袋阿三牌土豆,要麻辣味的"
IPotato potato = new 麻辣土豆();
potato.土豆介绍();
要五香味的:
IPotato potato = new 五香土豆();
potato.土豆介绍();
慢慢地,阿三卖土豆积累了些资本.他野心也变得大了,他把相距一公里小街上的小四牛肉店(经营:五香牛肉 和 麻辣牛肉)兼并了过来,卖土豆的同时,也卖点牛肉!
interface IBeef
{
void 牛肉介绍();
}
class 麻辣牛肉 : IBeef
{
public void 牛肉介绍()
{
Console.WriteLine( "我是麻辣牛肉!");
}
}
class 五香牛肉 : IBeef
{
public void 牛肉介绍()
{
Console.WriteLine("我是五香牛肉!");
}
}
阿三的小店扩大了,卖土豆的同时,也卖牛肉,两样味道都做的不错,所以顾客们经常土豆和牛肉一起买:
IPotato potato1 = new 五香土豆();
potato1.土豆介绍();
IPotato potato2 = new 麻辣土豆();
potato2.土豆介绍();
IBeef beef1 = new 五香牛肉();
beef1.牛肉介绍();
IBeef beef2 = new 麻辣牛肉();
beef2.牛肉介绍();
阿三的事业蒸蒸日上,他的产品已经是供不应求!!怎么办?
需要立即改变经营模式,否则将不能适应小店的发展.
阿三召集家里人都来帮他,他把原来的经营模式作了改变,同时为了适应不同顾客的口味(麻辣口味和五香口味),他把小店分成两个部分:
小店1(FactoryA)生产五香口味
小店2(FactoryB)生产麻辣口味
class FactoryA
{
public IPotato 制作土豆()
{
return new 五香土豆();
}
public IBeef 制作牛肉()
{
return new 五香牛肉();
}
}
class FactoryB
{
public IPotato 制作土豆()
{
return new 麻辣土豆();
}
public IBeef 制作牛肉()
{
return new 麻辣牛肉();
}
}
这样可好了,针对"五香"口味的顾客朋友:
FactoryA factory = new FactoryA();
IBeef beef = factory.制作牛肉();
beef.牛肉介绍();
IPotato potato = factory.制作土豆();
potato.土豆介绍();
针对"麻辣"口味的顾客朋友:
FactoryB factory = new FactoryB();
IBeef beef = factory.制作牛肉();
beef.牛肉介绍();
IPotato potato = factory.制作土豆();
potato.土豆介绍();
这样,吃"五香"味道的顾客就到FactoryA工厂
吃"麻辣"味道的顾客就到FactoryB工厂
但是,两个工厂的街道地址不在一起,距离有1公里路,很多顾客经常跑错路,"五香"口味的顾客来到"麻辣"工厂,"麻辣"口味的顾客来到"五香"工厂,让顾客无所适从.
并且自从成立了两个工厂以后,阿三变得轻松多了,他的工作的重点应该是两个工厂的管理,为了解决上面的问题,
阿三决定:两家工厂不接待顾客,于是阿三成立了集团公司(AbstractFactory),下面有两个子公司:
abstract class AbstractFactory
{
public abstract IPotato 制作土豆();
public abstract IBeef 制作牛肉();
}
class FactoryA : AbstractFactory
{
public override IPotato 制作土豆()
{
return new 麻辣土豆();
}
public override IBeef 制作牛肉()
{
return new 麻辣牛肉();
}
}
class FactoryB : AbstractFactory
{
public override IPotato 制作土豆()
{
return new 五香土豆();
}
public override IBeef 制作牛肉()
{
return new 五香牛肉();
}
}
集团公司直接接待顾客:
下面是麻辣口味:
AbstractFactory factory = new FactoryA();
IBeef beef = factory.制作牛肉();
beef.牛肉介绍();
IPotato potato = factory.制作土豆();
potato.土豆介绍();
下面是五香口味:
AbstractFactory factory = new FactoryB();
IBeef beef = factory.制作牛肉();
beef.牛肉介绍();
IPotato potato = factory.制作土豆();
potato.土豆介绍();
自此,阿三由原来的小的手工作坊变成了现在的集团公司,事业如火如荼.
阿三创业记--抽象工厂
最新推荐文章于 2023-08-04 11:58:16 发布