zoukankan      html  css  js  c++  java
  • 《大话设计模式》第一章

    第一,要改,只需要改要改之字,此为可维护;第二,这些字并非用完这次就无用,完全可以在后来的印刷中重复使用,此及可复用;第三,此诗若要加字,只需另刻字加入即可,这是可扩展;第四,字的排列其实可能是竖排可能是横排,此时只需将活字移动就可做到满足排列需求,此是灵活性好。

    我写出的代码与小菜第一版代码本质上完全相同,如果我去面试,也是一个失败的家伙。不写成类的原因是,这么简单的代码还要写成类吗?意味着,我对类寄以较高的希望,只有复杂的东西才用的超级武器,我现在不用,是因为我的东西还不够复杂。顺序执行的代码方式根深蒂固,而不是一开始就用对象的思维去思考问题。

    1:业务逻辑与界面逻辑分开,降低耦合度,提高利用率(封装)
    2:增加一些功能时,不必修改原始类的源代码
    封装、继承、多态

    强制要求要利用到类,当然是可以写出类代码,我也只写一个类(运算类),存在的问题也是如果要增加一种运算,要把整个类源码开放开来进行修改。

    写到第三种方式时,我遇到的知识点就多了:
    1.虚方法virtual与重载override对应;
    2.throw new Exception("除数不能为0。");能够在屏幕上多显示一些有用信息
    3.我后面才知道我的写法错了,没有得到正确结果,我没有增加工厂类,而是直接在运算类中增加一个方法。但这种方法的缺点只在于:没有取出正确的变量,如果代码中用this给其赋值,也是可以的。
    虽然增加一种运算,还是要改运算工厂类,并且是使用switch,输入要有顺序,加号先输入,然后再输入前后两个数字。但毕竟不用把其它运算类的源码公开(这有点像,本来一个类的代码,现在变成几个类,所以实现了不用公开其它人源码,如果面向过程的也可以把单个函数编译成DLL,也一样)。根据我目前的知识,这算是最好的了。

    UML
    一个矩形框代表一个类,它分三层:名称(抽象用斜体表示);类特性,即字段和属性(前面的+表示public,-表示private,#表示protected);类操作,即方法或行为。(事件呢?)
    接口图也用矩形框表示,区别在于顶端有<<interface>>,(接口有没有方法或行为?)接口另一种表示法:棒棒糖表示法(够表示吗?会不会多处出现同样一个接口)

    继承用空心三角形+实线,子类指向父类,因此多个子类时,就共用一个空心三角形。
    接口用空心三角形+虚线,子类指向接口,因此多个子类实现同样接口,也是共用一个空心三角形。
    关联用实线箭头来表示,关联就说明类中间有用到其它类。
    聚合表示一种弱的“拥有”关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分。如大雁与雁群,聚合关系用空心的菱形+实线箭头表示,从雁群指向大雁,说明雁群包含大雁。
    合成(又译组合)是一种强的“拥有”关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。如鸟与翅膀,合成关系用实心的菱形+实线箭头表示,由鸟指向翅膀(鸟类中有翅膀的变量声明)。
    关联、聚合、合成都可能有标识基数。
    依赖关系用虚线表示,代码中表现为入口参数有该类型的变量。(实际中要根据代码区分它们的关系可能也是困难的)

  • 相关阅读:
    php_sphinx安装使用
    深入Web请求过程(笔记)
    php的单例模式
    解决rsync 同步auth failed on module问题
    生成shadow中hash字串
    python程序不支持中文
    xshell4无法使用小键盘问题解决
    LVS客户端启动脚本
    更改linux系统提示信息
    使用md5判断网站内容是否被篡改
  • 原文地址:https://www.cnblogs.com/yzx99/p/1241986.html
Copyright © 2011-2022 走看看