zoukankan      html  css  js  c++  java
  • 粗谈设计模式

    这两天在看设计模式,想在这边随便写点.
    模式一.装饰者模式 Decorate
    书中举的一个例子,就是卖咖啡的问题.
    首先coffee 有好多种,摩卡,蓝山等等.
    我们会定义一个基类class coffee
    {
        decimal cost();
    }
    然后派生两个类
    class mocha : coffee
    {
        decimal cost();
    }
    class blue : coffee
    {
        decimal cost();
    }

    这个时候顾客会有要求,我要加三份奶,两份糖,当然starbucks是免费的.
    很自然我们会定义两个类milk 和sugar
    class milk
    {
        decimal cost();{return 1.00;}
    }

    class sugar
    {
        decimal cost();{return 1.00;}
    }

    void main() //首先我们不考虑是mocha 还是blue,假定是mocha
    {
        decimal(Mocha mocha,int milknum,int sugarnum)
        {
            Sugar su = new Sugar();
            Milk mi = new Milk();
            return mocha.cost() + milknum * mi.cost() + sugarnum * su.cost();
        }
    }

    接下来是用装饰者模式来实现
    让每个辅料继承coffee
    class Milk :coffee
    {
        private coffee _coffee;
        public Milk(coffee coffee)

        {this._coffee = coffee;}
        decimal cost()
        {
            return 1.00 + _coffee.cost();
        }
    }
    sugar也是这样修改
    然后我们看main
    void main()
    {
        Coffee coffee = new Mocha();
        coffee = new sugar(coffee);
        coffee = new sugar(coffee);
        coffee = new sugar(coffee);
        coffee = new milk(coffee);
    coffee = new milk(coffee);
    cost(coffee);
    }
    decimal cost(coffee _coffee)
    {
        return _coffee.cost();
    }
    我发现在计算费用方面是方便了,但是对于,几份糖,几份奶还是不是很方便.

    Always.Net
  • 相关阅读:
    POJ-1035 Spell checker---字符串处理
    hdu-3572 Task Schedule---最大流判断满流+dinic算法
    BZOJ4826: [Hnoi2017]影魔
    BZOJ4825: [Hnoi2017]单旋
    BZOJ3504: [Cqoi2014]危桥
    BZOJ4407: 于神之怒加强版
    BZOJ2818: Gcd
    BZOJ4542: [Hnoi2016]大数
    BZOJ4540: [Hnoi2016]序列
    BZOJ4537: [Hnoi2016]最小公倍数
  • 原文地址:https://www.cnblogs.com/alwaysdotnet/p/1205536.html
Copyright © 2011-2022 走看看