HTML5技术

详解设计模式六大原则 - 请叫我头头哥

字号+ 作者:H5之家 来源:博客园 2015-10-20 09:22 我要评论( )

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。

借用并改编一下鲁迅老师《故乡》中的一句话,一句话概括设计模式: 希望本无所谓有,无所谓无.这正如coding的设计模式,其实coding本没有设计模式,用的人多了,也便成了设计模式

v六大原则

设计模式(面向对象)有六大原则:

开闭原则具有理想主义的色彩,它是面向对象设计的终极目标。其他几条,则可以看做是开闭原则的实现方法。 设计模式就是实现了这些原则,从而达到了代码复用、增加可维护性的目的。

vC# 开闭原则

1.概念: 

一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。模块应尽量在不修改原(是“原”,指原来的代码)代码的情况下进行扩展。

2.模拟场景: 

在软件的生命周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试。

3.Solution: 

当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。

4.注意事项: 

5.开闭原则的优点: 

  • 可复用性
  • 可维护性
  • 6.开闭原则图解: 

    C# 开闭原则

    vC# 里氏代换原则

    1.概述: 派生类(子类)对象能够替换其基类(父类)对象被调用

    2.概念: 

    里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。(源自百度百科)

    3.子类为什么可以替换父类的位置?: 

    当满足继承的时候,父类肯定存在非私有成员,子类肯定是得到了父类的这些非私有成员(假设,父类的的成员全部是私有的,那么子类没办法从父类继承任何成员,也就不存在继承的概念了)。既然子类继承了父类的这些非私有成员,那么父类对象也就可以在子类对象中调用这些非私有成员。所以,子类对象可以替换父类对象的位置。

    4.C# 里氏代换原则优点: 

    需求变化时,只须继承,而别的东西不会改变。由于里氏代换原则才使得开放封闭成为可能。这样使得子类在父类无需修改的话就可以扩展。

    5.C# 里氏代换原则Demo: 

    代码正文:

    //------------------------------------------------------------------------------ // <copyright file="Program.cs" company="CNBlogs Corporation"> // Copyright (C) 2015-2016 All Rights Reserved 作 者: 请叫我头头哥 // </copyright> TestApp { using System; class Program { static void Main(string[] args) { Transportation transportation = new Transportation(); transportation.Say(); Transportation sedan = new Sedan(); sedan.Say(); Console.ReadKey(); } } class Transportation { public Transportation() { Console.WriteLine(); } Say() { Console.WriteLine(); } } class Sedan:Transportation { public Sedan() { Console.WriteLine(); } Say() { Console.WriteLine(); } } class Bicycles : Transportation { public Bicycles() { Console.WriteLine(); } Say() { Console.WriteLine(); } } }

    代码效果:

    6.里氏代换原则图解: 

    C# 里氏代换原则

    vC# 依赖倒转原则

    1.概念: 

    依赖倒置原则(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。

    2.C# 依赖倒转原则用处: 

    有些时候为了代码复用,一般会把常用的代码写成函数或类库。这样开发新项目时,直接用就行了。比如做项目时大多要访问数据库,所以我们就把访问数据库的代码写成了函数。每次做项目去调用这些函数。那么我们的问题来了。我们要做新项目时,发现业务逻辑的高层模块都是一样的,但客户却希望使用不同的数据库或存储住处方式,这时就出现麻烦了。我们希望能再次利用这些高层模块,但高层模块都是与低层的访问数据库绑定在一起,没办法复用这些高层模块。所以不管是高层模块和低层模块都应该依赖于抽象,具体一点就是接口或抽象类,只要接口是稳定的,那么任何一个更改都不用担心了。

    3.注意事项: 

  • 高层模块不应该依赖低层模块。两个都应该依赖抽象。
  • 抽象不应该依赖结节。细节应该依赖抽象。
  • 4.模拟场景: 

    场景:

    假设现在需要一个Monitor工具,去运行一些已有的APP,自动化来完成我们的工作。Monitor工具需要启动这些已有的APP,并且写下Log。

    代码实现1:

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • 设计模式(1)单例模式(Singleton) - Fonour

      设计模式(1)单例模式(Singleton) - Fonour

      2017-04-23 12:00

    • ASP.NET Core MVC 源码学习:详解 Action 的激活 - Savorboard

      ASP.NET Core MVC 源码学习:详解 Action 的激活 - Savorboard

      2017-04-14 13:04

    • EntityFramework Core并发深挖详解,一纸长文,你准备好看完了吗? - Jeffcky

      EntityFramework Core并发深挖详解,一纸长文,你准备好看完了吗? -

      2017-04-05 14:03

    • ASP.NET Core MVC 源码学习:详解 Action 的匹配 - Savorboard

      ASP.NET Core MVC 源码学习:详解 Action 的匹配 - Savorboard

      2017-03-30 18:02

    网友点评
    <