设计模式的概念

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

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

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

各模式简介:







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

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

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

设计原则

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

  • 简约原则(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. 海量日志采集系统flume架构与原理

    1.Flume概念 flume是分布式日志收集系统,将各个服务器的数据收集起来并发送到指定地方. Flume是Cloudera提供的一个高可用.高可靠.分布式的海量日志采集.聚合和传输的系统.Flum ...

  2. redis基础(一)

    redis是一种流行的非关系内存型数据库,拥有非常高的读写性能,下面是本人学习的总结. redis的类型 键:redis的所有的键都是string类型: 值:五种类型 string:字符串类型:一个s ...

  3. jersey实现文件下载

    好久没有更新博客了,今天来再次总结一下,之前有整理过关于jersey实现文件上传功能的相关知识,但是前一阵子在实习过程中写接口又要实现文件下载的功能,由于这些东西基本都是使用jersey提供的注解和接 ...

  4. svn协同开发下的dll版本管理最佳实践

    作为一名开发人员,常常碰到的一个问题是,当使用svn签出一份最新代码时,经常不能一次编译通过,导致花费大量时间去解决编译问题,这里碰到的问题一般可以分为三类: 1. 由于提交代码的开发人员失误,忘记提 ...

  5. restfull软件架构风格

    概念:restfull是一种软件架构风格,实现该风格不需导jar包,但要使用@PathVariable注解:特点:没有参数,没有扩展名优势: 1.安全 2.简洁高效 3.容易被搜索引擎所收录 如何利用 ...

  6. 【转】Android开发之数据库SQL

    android中的应用开发很难避免不去使用数据库,这次就和大家聊聊android中的数据库操作. 一.android内的数据库的基础知识介绍 1.用了什么数据库 android中采用的数据库是SQLi ...

  7. Cookie的简单用法

    ASP.NET初学者使用cookie的时候会感觉很陌生,在学习的过程中掌握cookie对象的增删改查非常有必要,,下面是我学习的时候经常用到的这些方法 写入和读取Cookie都需要用户Respone对 ...

  8. bzoj 1855: [Scoi2010]股票交易

    Description 最近lxhgww又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律. 通过一段时间的观察,lxhgww预测到了未来T天内某只股票的走势,第i天的股票买入价 ...

  9. bzoj 1801: [Ahoi2009]chess 中国象棋

    Description 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像棋中炮的行走方式大家应该很清楚吧. Input 一行包含两个整数N, ...

  10. JFinal极速开发框架使用笔记

    记录第一次使用JFinal,从简单的框架搭建到增删改查,从自带的方法到正常框架习惯的使用方式. JFinal官网:http://www.jfinal.com/ JFinal 是基于 Java 语言的极 ...