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 = 数码类。

  • 相关阅读:
    Nginx资源合并优化模块nginx-http-concat
    Nginx的模块http_secure_link_module
    Nginx前段加速模块pagespeed-ngx
    Naxsi+nginx前段保护
    Selenium for C#的入门Demo
    C# 比较两个数组中的内容是否相同的算法
    C#读取自定义的config
    关于分布式计算之Actor、AKKA和MapReduce
    numpy模块的基本使用
    python单元测试库
  • 原文地址:https://www.cnblogs.com/Nobel/p/1708888.html
Copyright © 2011-2022 走看看