zoukankan      html  css  js  c++  java
  • 设计往往会偏向复杂

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

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

    然后第三个用委托。

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

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

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

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

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

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

    产品 a.税率 = 策略1。

    产品 b.税率 = 策略2。

    但是:

    产品 c.税率 = 策略1。

    产品 d.税率 = 策略2。

    ……

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

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

    数码类 {税率}

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

    总价:a.税率 * b;

    打印:a.打印(c)

    }

    产品类 computer.a = 数码类。

  • 相关阅读:
    AC日记——色板游戏 洛谷 P1558
    AC日记——方差 洛谷 P1471
    AC日记——[Scoi2010]序列操作 bzoj 1858
    AC日记——Sagheer and Nubian Market codeforces 812c
    AC日记——Sagheer, the Hausmeister codeforces 812b
    AC日记——Sagheer and Crossroads codeforces 812a
    [BJOI2019]排兵布阵 DP
    多重背包二进制优化
    BZOJ 3211 花神游历各国 线段树
    「CQOI2006」简单题 线段树
  • 原文地址:https://www.cnblogs.com/Nobel/p/1708888.html
Copyright © 2011-2022 走看看