设计模式的概念

设计模式是高层次的、抽象的解决方案模板。可以将这些模式视为解决方案的蓝本而不是解决方案本身。通常是通过重构自己的代码并将问题泛化来实现设计模式。

软件设计中常见的模式大体分为三类:

  • 创建型模式:处理对象构造和引用
  • 结构型模式:处理对象之间的关系以及它们之间如何进行交互以形成更大的复杂对象。
  • 行为型模式:处理对象之间的通信,特别是职责和算法方面。

各模式简介:







模式对于软件设计和开发而言至关重要,通过共享的词汇来表达思想。具备设计模式牢固知识的团队,沟通起来更有效、顺畅,而不必拘泥于底层实现的细节。

设计模式的使用价值在于它们是可靠的、经过验证的解决方案。设计模式的宗旨就是重用解决方案,避免一次又一次的做重复的工作。

但是设计模式并非银弹,即不是所有的问题都需要或可以用设计模式来解决。这是一把双刃剑,用得好可以把复杂的问题简单化,用不好简单的问题也会被复杂化,所以重点是对于要解决的问题的思考,将问题泛化(形成一种解决问题的套路),而不是拿着设计模式硬往代码上套。

设计原则

设计原则是设计模式的基础,遵循经过验证的设计原则,自己的代码会更加灵活、更具有适应性和可维护性。以下为常见的设计原则

  • 简约原则(KISS):该原则的目标就是让代码保持简洁但不要过于简陋,避免引入任何不必要的复杂度。
  • 不要重复自己(DRY):将公用的部分抽离出来放在一个单独的地方,避免在系统中重复出现。这个原则不仅仅书的是代码,还包括系统中重复的任何逻辑。
  • 讲述而不要询问(Tell,Don't Ask):应该告诉对象您希望他们执行什么动作,而不是询问有关该对象状态的问题然后由您决定希望执行什么动作。这个原则有助于匹配职责并避免类之间的耦合。
  • 您不需要它(YAGNI):指的是只需要将应用程序必须的功能包含进来,而不要试图添加任何您觉得可能需要的功能。
  • 分离关注点(SoC):将软件分解为多项不同的功能,每项功能封装了可供其他类使用的唯一行为和数据。将程序划分成若干独立职责的做法显著提高了代码的重用程度、维护性和可测试性。

S.O.L.I.D设计原则

S.O.L.I.D设计原则是一组针对面向对象设计的最佳实践。

  • 单一职责原则(SRP):该原则与SoC原则很相似,要求每个类有且只有发生变化的原因。
  • 开放封闭原则(OCP):要求类对于扩展应该是开放的,对于修改应该是封闭的,这样可以在不改变类的内部行为的情况下添加新功能并扩展类。
  • 里氏替换原则(LSP):子类必须可替代它的基类。
  • 接口分离原则(ISP):使用相同接口的类只需要实现特定的一组方法,而不是实现一个大而全的单体方法接口。
  • 依赖倒置原则(DIP):将自己编写的类与具体的实现隔离开来,让这些类依赖于抽象或接口,即面向接口编程。降低代码的耦合度,提高系统灵活性。
  • 依赖注入(DI)和控制反转(IoC)原则:与DIP紧密相关的是DI原则和IoC原则。DI通过构造器、方法和属性来提供底层类或从属类。配合使用DI原则,这些从属类可以被反转为接口或者抽象类,从而达到代码松耦合的效果。在IoC原则中,系统的控制流与过程式编程方法相比是反转的。通过IoC容器将服务注入到客户端代码,而不必让客户端代码指定具体的实现。所谓控制反转指的是客户端获取服务的行为。

《ASP.NET 设计模式》

ASP.NET 设计模式:设计模式和原则简述的更多相关文章

  1. 设计模式之六大原则——接口隔离原则(ISP)

    设计模式之六大原则——接口隔离原则(ISP)  转载于:http://www.cnblogs.com/muzongyan/archive/2010/08/04/1792528.html 接口隔离原则 ...

  2. GOF业务场景的设计模式-----设计模式六大原则

    单一职责原则(Single Responsibility Principle) 定义:不要存在多于一个导致类变更的原因.通俗的说,即一个类只负责一项职责. 问题由来:类T负责两个不同的职责:职责P1, ...

  3. 设计模式——依赖倒置原则实例(PHP实现)

    <?php /** * 设计模式--依赖倒置原则实例 * Created by DannyWang * jue.wang@yulore.com * 2015-05-05 */ abstract ...

  4. Java 设计模式(二)-六大原则

    Java 设计模式(二)-六大原则 单一职责原则(Single Responsibility Principle) 定义: 不要存在多余一个原因导致类变更,既一个类只负责一项职责. 问题由来: 当类A ...

  5. [.net 面向对象程序设计深入](13)实战设计模式——设计模式使用场景及原则

    [.net 面向对象程序设计深入](13)实战设计模式——设计模式使用场景及原则 1,什么是设计模式? 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计 ...

  6. C++ 设计模式 依赖倒置原则 简单示例

    C++ 设计模式 依赖倒置原则 简单示例 /** * 依赖倒置原则(Dependency Inversion Principle) * 依赖于抽象(接口),不要依赖具体的实现(类),也就是针对接口编程 ...

  7. C++ 设计模式 开放封闭原则 简单示例

    C++ 设计模式 开放封闭原则 简单示例 开放封闭原则(Open Closed Principle)描述 符合开放封闭原则的模块都有两个主要特性: 1. 它们 "面向扩展开放(Open Fo ...

  8. C#之设计模式之六大原则(转载)

    设计模式之六大原则(转载) 关于设计模式的六大设计原则的资料网上很多,但是很多地方解释地都太过于笼统化,我也找了很多资料来看,发现CSDN上有几篇关于设计模式的六大原则讲述的比较通俗易懂,因此转载过来 ...

  9. [.net 面向对象程序设计深入](18)实战设计模式——设计模式使用场景及原则

    [.net 面向对象程序设计深入](18)实战设计模式——设计模式使用场景及原则 1,什么是设计模式? 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计 ...

  10. 实践GoF的23种设计模式:SOLID原则(上)

    摘要:本文以我们日常开发中经常碰到的一些技术/问题/场景作为切入点,示范如何运用设计模式来完成相关的实现. 本文分享自华为云社区<实践GoF的23种设计模式:SOLID原则(上)>,作者: ...

随机推荐

  1. 关于IntelliJ IDEA有时候快捷键无效的说明

    1.这个原因最大的因素可能就是 搜狗输入法了, 关闭搜狗输入法,ok, 2.也可能是qq快捷键冲突,关闭它. 3.也可能是搜狗输入法快捷键冲突,关闭它.

  2. 《C程序设计语言》【PDF】下载链接:

    <C程序设计语言>[PDF]下载 https://u253469.pipipan.com/fs/253469-230382180 内容简介 在计算机发展的历史上,没有哪一种程序设计语言像C ...

  3. JS中数组的迭代方法和归并方法

    昨天总结的JavaScript中的数组Array方法 数组的迭代方法 ES5中为数组定义了5个迭代方法.每个方法都要接收两个参数:要在每一项上面运行的函数和(可选的)运行该函数的作用域对象---影响t ...

  4. 【python】函数闭包

    列表时可以改

  5. HTML基础教程-段落

    HTML 段落 段落是通过 <p> 标签定义的. <p>This is a paragraph</p> <p>This is another parag ...

  6. 监听键盘弹起View上调

    可以用三方库IQKeyboardManager 用这个第三方 http://www.jianshu.com/p/f8157895 #pragma mark - keyboard events - // ...

  7. Xamarin android SwipeRefreshLayout入门实例

    android SwipeRefreshLayout 是实现的效果就是上滑下拉刷新ListView 获取其他控件数据.基本上每个App都有这种效果.Google提供了一个官方的刷新控件SwipeRef ...

  8. BZOJ 4818 SDOI2017 序列计数

    刚出炉的省选题,还是山东的. 自古山东出数学和网络流,堪称思维的殿堂,比某地数据结构成风好多了. 废话不说上题解. 1.题面 求:n个数(顺序可更改),值域为[1,m],和为p的倍数,且这些数里面有质 ...

  9. redis中使用 check-and-set 操作实现乐观锁

    WATCH 命令可以为 Redis 事务提供 check-and-set (CAS)行为. 被 WATCH 的键会被监视,并会发觉这些键是否被改动过了. 如果有至少一个被监视的键在 EXEC 执行之前 ...

  10. MYSQL忘记root密码后如何修改

    方法1: 用SET PASSWORD命令 首先登录MySQL. 格式:mysql> set password for 用户名@localhost = password('新密码'); 例子:my ...