• 【设计模式】最快理解设计模式的几大原则


    设计模式的真正境界,就是看懂,然后忘记。

    单一职责原则

    只干一件事。
    这个粒度越小,就越好复用,重复代码就越少,但是代码量也越多,需要自己权衡。

    里氏替换原则

    子类可以扩展父类的功能,但不能改变父类原有的功能。
    可以尽量减少重复作用的类,也防止调用父子类同名方法造成不同的效果。
    问题:继承的层级过多,子类会很庞大,如果并不需要用父类的方法, 就很冗余。

    例子:

    父亲会移动,用的腿。儿子也会移动,用的车。
    调用者想用腿走,但是调用儿子的移动,就会有问题。
    所以要儿子实现开车方法,让调用者自己选择。

    开闭原则

    写新代码不改老代码。
    使用抽象类,让不同的人实现不同的效果,实现扩展。

    例子:

    抽象类 移动
    类A 实现 移动 用腿
    扩展
    类B 实现 移动 用自行车
    调用者 自由选择A或者B

    依赖倒置原则

    要面向接口编程,不要面向实现编程。
    使用接口类,让不同的人实现不同的,但是效果一致。
    调用者调用的是接口,并不用关心实现,效果都一致。

    例子:

    接口类 购物方式
    类A 实现 购物方式 上淘宝
    类B 实现 购物方式 上京东

    购物类 初始化注入购物方式类

    调用者 选择不同的购物方式类注入,然后使用购物类

    接口隔离原则

    减少接口依赖
    提供更符合需求,更具体的接口。也就是结合业务进行封装。

    例子:

    套餐。
    用户可以点牛排、面包、面条、花椰菜、玉米。
    但是所有这些都放到一个接口类里面,就很多。
    可以提供,主食类、肉类、汤类。
    或者 儿童套餐,双人套餐,家庭套餐。
    主要是结合场景对小接口进行归类和整合。

    迪米特法则

    避免直接调用或直接通信。
    也叫层次依赖。
    从依赖者的角度来说,只依赖应该依赖的对象。
    从被依赖者的角度说,只暴露应该暴露的方法。

    例子:

    手机类 APP类 内容类
    内容类就只用依赖APP,而不用依赖手机。

    还有种理解,增加了调用者负担。
    也叫增加了API表面积,就是尽量让调用者少关注实现逻辑

    例子:

    一个错误处理方法,有几种错误类型。
    第一种写法就是提供一个类,然后你根据类内的错误类型进行判断。这样一旦类型修改了就要改调用者的代码。
    第二种写法就是提供一个校验的方法,你只用调用这个方法就知道是不是错误,或者是什么错误。

    合成复用原则

    少用继承,多用组合
    就是将代码分成块A、块B、C..
    然后制造积木1就是包含以下A和B,积木2可能就是BCD。自由组合,更灵活。

    总结

    Go语言还是厉害的。
    直接没有继承,只有结构体和包,这不就是一块一块么?
    也没有纯虚类,只有接口,直接就是面向接口编程。

    看完就忘掉这几个法则把,只要记住应该怎么做就好了,什么是对,什么是错,我反正是不记得什么原则对应什么的,只记得应该这样和为什么要这样。

  • 相关阅读:
    bzoj2395: [Balkan 2011]Timeismoney
    bzoj2725: [Violet 6]故乡的梦&&bzoj4400: tjoi2012 桥
    bzoj3047: Freda的传呼机&bzoj2125: 最短路
    bzoj2734: [HNOI2012]集合选数
    bzoj2728: [HNOI2012]与非
    bzoj2730: [HNOI2012]矿场搭建
    bzoj2727: [HNOI2012]双十字
    蓝桥杯-计蒜客之节假日
    蔡基姆拉尔森计算公式
    最长公共子串与最长公共子序列
  • 原文地址:https://www.cnblogs.com/HappyTeemo/p/16283659.html
Copyright © 2020-2023  润新知