zoukankan      html  css  js  c++  java
  • 面向对象设计原则

    面向对象七大设计原则

     

    1、开闭原则

     

    2、里氏替换原则

     

    3、 单一职责原则

     

    4、接口隔离原则

     

    5、依赖倒置原则

     

    6、迪米特原则

     

    7、组合

    /

    聚合复用原则

     

    知识点关联

     

    学习面向对象的设计模式,

    是深入面向对象思想的钥匙,

    通过大师级的微妙案例,

    我们可以

    开阔自己的认知。

     

    在学习面向对象设计七大原则之前,我们要对基本的封装、继承、多态思想有足够的了解,

    对抽象类和接口也要有足够的编码能力,因为设计模式是以上知识点的综合应用。

     

    另外,

    在接触具体的设计模式之前,

    面向对象的七大设计原则会让你知道,

    设计模式出现的

    必然性和意义所在。

     

     

    1、

    每一种设计思想的精准含义,具体如下:

     

    先从整体认识这七种设计思想。

     

    一、开闭原则:

    这一条放在第一位来理解,

    它的含义是

    对扩展开放,

    对修改关闭

    解释一下就是,

    我们

    写完的代码,不能因为需求变化就修改。我们可以通过新增代码的方式来解决变化的需求。

     

    当然,这是一种理想的状态,在现实中,我们要尽量的缩小这种修改。

     

    再解释一下这条原则的意义所在,

    我们采用逆向思维方式来想。

    如果每次需求变动都去

    修改原有的代码,

    那原有的代码就存在被修改错误的风险,

    当然这其中存在有意和无意的修改,

    都会导致原有正常运行的功能失效的风险,

    这样很有可能会展开可怕的蝴蝶效应,

    使维护工作剧增。

     说到底,开闭原则除了表面上的可扩展性强以外,在企业中更看重的是维护成本。

     所以,

    开闭原则是设计模式的第一大原则,它的潜台词是:控制需求变动风险,缩小维护成本。

     

    以下几种原则,都是为此原则服务的。

     

    二、里氏替换选择:

     

    此原则的含义是子类可以在任何地方替换它的父类。解释一下,这是多态的前提,我

    们后面很多所谓的灵活,都是不改变声明类型的情况下,改变实例化类来完成的需求变更。当然,

    继承的特性看似天然就满足这个条件。

    但这里更注重的是继承的应用问题,

    我们必须保证我们的子类和父类划分是精准的。

     

    里氏替换原则的潜台词是:尽量使用精准的抽象类或者接口。

     

    三、单一职责原则:

    单一职责的含义是:

    类的职责单一,引起类变化的原因单一。解释一下,这也是灵活的前提,

    如果我们把类拆分成最小的职能单位,

    那组合与复用就简单的多了,

    如果一个类做的事情太多,在组合的时候,必然会产生不必要的方法出现,这实际上是一种污染。

     

    举个例子,我们在绘制图案的时候,用“点”组成图和用“直线”组成图,哪个更灵活呢?一定是“点”,它可以绘制任何图形,而直线只能绘制带有直线条的图案,它起码无法画圆。

     

    单一职责的潜台词是:拆分到最小单位,解决复用和组合问题。

     

    四、接口隔离原则:

     

    接口隔离原则可以说是单一职责的必要手段,

    它的含义是尽量使用职能单一的接口,

    而不使用职能复杂、全面的接口。

    很好理解,接口是为了让子类实现的,

    如果子类想达到职能单一,那么接口也必须满足职能单一。

     

    相反,

    如果接口融合了多个不相关的方法,

    那它的子类就被迫要实现所有方法,

    尽管有些方法是根本用不到的。这就是接口污染。

     

    接口隔离原则的潜台词是:拆分,从接口开始。

     

    五、依赖倒置原则:

     

    想要理解依赖倒置原则,

    必须先理解传统的解决方案。

    面相对象的初期的程序,

    被调用者依赖于调用者。

    也就是调用者决定被调用者有什么方法,

    有什么样的实现方式,

    这种结构在需求变更的时候,会付出很大的代价,甚至推翻重写。

     

    依赖倒置原则就是

    要求调用者和被调用者都依赖抽象

    ,这样两者没有直接的关联和接触,在变动的时候,一方的变动不会影响另一方的变动。

     

    其实,依赖倒置和前面的原则是相辅相成的,都强调了抽象的重要性。

     

    依赖倒置的潜台词是:面向抽象编程,解耦调用和被调用者。

     

    六、迪米特原则:

     

    迪米特原则

    要求尽量的封装,尽量的独立,尽量的使用低级别的访问修饰符。这是封装特性的典型体现。

     

    一个类如果暴露太多私用的方法和字段,

    会让调用者很茫然。

    并且会给类造成不必要的判断代码。

    所以,我们使用尽量低的访问修饰符,

    让外界不知道我们的内部。这也是面向对象的基本思路。这是迪米特原则的一个特性,无法了解类更多的私有信息。

     

    另外,

    迪米特原则要求类之间的直接联系尽量的少,

    两个类的访问,

    通过第三个中介类

    来实现。

     

    迪米特原则的潜台词是:不和陌生人说话,有事去中介。

     

    七、组合

    聚合复用原则:

     

    此原则的含义是,如果

    只是达到代码复用的目的,尽量使用组合与聚合,而不是继承。这里需要解释一下,

    组合聚合只是引用其他的类的方法,而不会受引用的类的继承而改变血统。

     

     

    继承的耦合性更大,比如一个父类后来添加实现一个接口或者去掉一个接口,那子类可

    能会遭到毁灭性的编译错误,

    但如果只是组合聚合,只是引用类的方法,

    就不会有这种巨大的风险,同时也实现了复用。

     

    组合聚合复用原则的潜台词是:我只是用你的方法,我们不一定是同类。

  • 相关阅读:
    JAVA_Collection容器
    ArrayList实现分组功能
    scrapy 安装出错 [err2] no such file or directory: 'README.rst'【已解决】
    python spyder 今天突然打不开了【已解决】
    SVN使用教程总结
    MVC框架浅析(基于PHP)
    Web性能优化方案
    野生程序员的故事
    js控制页面跳转,清缓存,强制刷新页面
    js中json处理总结之JSON.parse
  • 原文地址:https://www.cnblogs.com/PGYXZ/p/4805705.html
Copyright © 2011-2022 走看看