粗谈设计模式

这两天在看设计模式,想在这边随便写点.
模式一.装饰者模式 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
原文地址:https://www.cnblogs.com/alwaysdotnet/p/1205536.html