阿三创业记--抽象工厂

 前言:我在讲解抽象工厂时发现,这个概念确实够"抽象"的,我讲的抽象,大家听得更抽象,为了把抽象工厂讲清楚明白,我特意虚构了一个案例,献给我的学员们——
阿三创业记:
阿三高考落榜,在家游手好闲,于是有个朋友就数落他,"阿三,你这样连街上卖土豆的都不如!".
阿三又气又恼,心想,"我就这么不争气么?说我连卖土豆的都不如......,土豆,土豆?别瞧不起卖土豆的,行行出状元,我就卖给你看!"
于是阿三就张罗起了他的土豆店,卖起了麻辣土豆.
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.土豆介绍();
自此,阿三由原来的小的手工作坊变成了现在的集团公司,事业如火如荼.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_大漠孤烟_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值