设计往往会偏向复杂

关联内容: 面向对象思想的头脑风暴(一)

关联的文章讨论了一个开放封闭原则的具体案例,其中前两个是超级复杂化的设计,而且还完全不符合开放封闭原则。但是,我想如果没有学习过所谓的设计模式的人,绝对不会犯前两个这种“模式过度”的错误的。因此,设计模式的爱好者们,要小心了,让你代码变得恶心的,往往就是你所热衷的东西。

然后第三个用委托。

第四个用组合接口的方式。

也许是例子不够好,我觉得第三第四也是不完美。

我们回顾一下设计要求:“

需要处理三种产品图书,数码,消费,需要计算产品的税率,图书的税率为价格的0.1,数码和消费类产品为价格的0.11,需要获得三种产品的信息,图书和消费类产品的信息为:"名字:" + Name;,数码产品的信息为:"数码类名字:" + Name;

有个产品类,然后让你加入税率率和打印的问题,你会怎么处理?

你可以让每个产品具体选择应该有的策略,就如关联文章所采取的设计。

产品 a.税率 = 策略1。

产品 b.税率 = 策略2。

但是:

产品 c.税率 = 策略1。

产品 d.税率 = 策略2。

……

你可能需要生产一千个不同产品,却发现来来去去都是这两个策略。

我的分析是这样,首先有个产品类,现在要加入和打印,根据要求,策略依赖的不是具体的产品,而是产品的类型。因此我觉得首先就应该把抽象上升到上一个层次,针对不同产品的类型来编程。

数码类 {税率}

产品类 {类型 a;价格 b;名字 c;

总价:a.税率 * b;

打印:a.打印(c)

}

产品类 computer.a = 数码类。

posted @ 2010-04-10 12:08  诺贝尔  阅读(354)  评论(0编辑  收藏  举报