zoukankan      html  css  js  c++  java
  • 设计原则与编程技巧汇总

    1,SRP【单一职责链原则】

    单一职责链原则:按照职责把对象分解成更小的颗粒度,有助于代码的复用,亦有利于单元测试,缺点是增加编写代码的复杂度。

    常用的有:

    代理模式,通过代理把本体需要做的事情分离出来,互不影响;

    迭代器模式,也是将职责分离,迭代器对象职责专门负责遍历对象,而分离出业务函数中的遍历;

    单例模式,典型的单一职责链模式,将单利实现方式分离出来,其他业务方法只负责实现,而不用负责单例实现;

    装饰者模式给,给对象动态增加职责,分离职责的一种方式。

    2,LKP【最少知识原则 / 好莱坞原则 / 迪米特法则】

    尽可能少的与实体发生交互,对象,类,系统,函数,变量等

    单一职责原则是将对象划分成较小的颗粒度,提高对象的可复用性,但是对象间的耦合度高的话,会影响它的复用性,程序中的朋友太多并不是一件好事。类似的故事:“城门失火,殃及池鱼”,“一人犯法,株连九族”,就是说对象间的耦合度太高,那么会牵一发而动全身。

    最少知识原则就是尽量减少对象间的交互,简单的来说,如果我需要和你通信,不会直接跟你通信,而通过一个第三方帮忙,其实就是好莱坞原则,“不要给我们打电话,我们会给你打电话don't call us,we'll call you”。

    设计模式中的最少知识原则:中介者模式,外观模式

    中介者模式,增加一个中介者,让其负责调度。

    外观模式,最开始访问子系统时调度复杂,而外观模式为一组子系统提供了简单的访问入口,符合最少知识原则。

    var A = function(){
    a1();
    a2();
    }
    var B = function(){
    b1();
    b2();
    }
    var facade = function(){
    A();
    B();
    }
    facade();

    最少知识原则还体现在API的封装上,模块内部的实现对用户来说是透明的,只暴露必要的接口API供外界访问,优点是减少了对象间的依赖,但是也增加了一些庞大到难以维护的第三者对象。

    3,OCP【开放-封闭原则】

    软件实体(类,模块,函数等)应该是可以扩展的,但是不可修改的。这就符合开放-封闭原则。

    改代码时候,很容易引起另外一个bug的发生,所以改动代码往往是一种危险的行为。

    开放-封闭原则:当需要改变一个程序的功能或者给这个程序增加新功能时候,可以使用增加代码的方法,但是不允许改动程序的源代码。

    加个类似的故事吧,跟肥皂有关的,很能体现开发-封闭原则:有一家生产肥皂的大企业,从欧洲花巨资引入了一条生产线。这条生产线可以自动完成从原材料加工到包装成箱的整个流程,但美中不足的是,生产出来的肥皂有一定的空盒几率。于是老板又从欧洲找来一支专家团队,花费数百万元改造这一生产线,终于解决了生产出空盒肥皂的问题。

    另一家企业也引入了这条生产线,他们同样遇到了空盒肥皂的问题。但他们的解决办法很简单:用一个大风扇在生产线旁边吹,空盒肥皂就会被吹走。

    可以看出:修改源码风险以及成本较大,而通过增加几行代码就能解决的问题,也更加优雅和简单。

    多态思想也是一种开放-封闭原则体现【封装变化】。还有其他几种体现开发-封闭的体现还有,Hook【放置挂钩】,其实回调函数是一种特殊的挂钩,封装变化到回调函数里。

    开放封闭原则是编写好程序的目标,设计模式中所有的原则都是为了达到这个目标。

    有句古老的谚语说:“愚弄我一次,应该羞愧的是你。再次愚弄我,应该羞愧的是我。”这也是一种有效的对待软件设计的态度。为了防止软件背着不必要的复杂性,我们会允许自己被愚弄一次。

    在最初编码时我们可能不会考虑到变化,当变化到来时,我们可以回过头来封装变化,确保不会掉进同一个坑。

    【完】

    新年flag7——每天晚上写笔记,尽可能是专业知识,或者心灵感悟,或者心经等,总之是要写东西的。

  • 相关阅读:
    arcgis10安装及破解
    11G在用EXP导出时,空表不能导出
    cmd 中键入netstat,net等出现不是内部或外部命令,也不是可运行的程序或批处理文件
    Could not load file or assembly or one of its dependencies. 试图加载格式不正确的程序。
    Spark读写Hbase的二种方式对比
    Handler系列之原理分析
    虚拟目录webconfig的配置
    Smarty的基本使用与总结
    浅谈WEB前后端分离
    学习笔记之MVC级联及Ajax操作
  • 原文地址:https://www.cnblogs.com/tangjiao/p/10412002.html
Copyright © 2011-2022 走看看