Net设计模式实例系列文章总结[转]
1 什么是设计模式
设计模式是对在软件设计过程中重复出现的问题提出了一种比较好的解决方案。正如一位专家所说:设计模式是对程序设计人员经常遇到的设计问题的可再现的解决方案(The Smalltalk Companion)。GOF设计模式通常被认为是其他设计模式的基础,随着业务复杂度的增大,会不断涌现新的设计模式,而这些新的设计模式一般会以GOF模式理论为参照。
2 为什么要学习设计模式
从个人职业规划来考虑。一位软件开发工程师随着编码量的增加,开发经验的增加,软件理论理解的加深,会不由自主地想一些方法或者捷径,来提高自己的生产率,而不是面对重复的问题做相同的工作,当你有这种想法的时候,就需要开始学习设计模式,设计模式会给你一些比较好的解决方案,不但解决了问题也提升了自己的能力,同时也是迈向软件设计师和架构师的过度阶段。
从软件架构的角度来考虑。经济的快速发展造就了业务越来越复杂,那么如何使软件适应这种复杂的业务变化,在软件设计和架构时,适当地使用设计模式可以解决此问题,也要注意不要过度使用设计模式,否则会使系统变的更加复杂。设计模式也是代码重构的依据和工具,建议在代码的重构时,尽量融入设计模式。
3 设计模式原则
使用设计模式的根本原因是适用变化,提高代码复用率,使软件更具有可维护性和可扩展性。需要遵循以下几个原则:单一职责原色、开放封闭原则(Open Closed Principal)、依赖倒置原则、里氏代换原则。
3.1单一职责原则
就一个类而言,应该只有一个引起他变化的原因。如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会消弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破会。
3.2开放封闭原则
软件实体(类、模块、函数等)应该可以扩展,但不可以修改。也就是说对扩展是开放的,对修改是封闭的。一般来说,面对需求,对程序的改动是通过添加新代码进行的,而不是更改现有代码。
3.3依赖倒置原则
抽象不应该以来细节,细节应该依赖抽象,也就是提倡的“面对接口编程,而不是面对实现编程”。也可以这样理解:高层模块不应该依赖底层模块,两个都应该抽象;抽象不应该依赖细节,细节应该依赖抽象。
3.4里氏代换原则
子类必须能够替换掉他们的父类型。也就是说,在软件开发过程中,子类替换掉父类,程序的功能行为没有变化。只有当子类可以替换掉父类,软件单位的功能不受到影响时,父类才能真正被复用,而子类也可以在父类的基础上增加新的行为。
4 设计模式四个基本要素
设计模式使人们可以更加简单方便地复用成功的设计和体系结构,将已证实的技术表述成设计模式也会使新加入的系统开发者更加容易理解其设计思路。设计模式的基本要素包括模式名称、问题、解决方案和效果。
4.1模式名称
一个助记名称,用来描述设计模式、解决方案和效果。设计模式允许在较高的抽象层次上进行设计。基于一个模式词汇表,开发团队之间可以讨论模式并在编写文档时使用它们。模式名称可以帮助我们思考,便于团队成员交流设计思想及设计结果。找到合适的模式名称也是设计模式编目工作的难点之一。
4.2问题
问题主要描述在何时使用设计模式。它解释了设计问题和问题存在的前因后果、特定的设计问题和怎样用对象表示算法等。通常情况下,模式必须满足的一系列先决条件是问题。
4.3解决方案
解决方案描述了设计的组成成分、它们之间的相互关系及各自的职责和协作方式。因为模式就像一个模板,可应用于多种不同场合,所以解决方案并不描述一个特定具体的设计或实现,而是提供设计问题的抽象描述和怎样用一个具有一般意义的元素组合(类或对象组合)来解决这个问题。
4.4效果
描述了模式应用的效果及使用模式权衡的问题。尽管描述设计决策时,并不是总提到模式效果,但它们对于评价设计选择和理解使用模式的代价及优势具有重要意义。软件效果大多关注对时间和空间的衡量,它们也表述了语言和实现问题。因为复用是面向对象设计的要素之一,所以模式效果包括它对系统灵活性、扩充性或可移植性的影响,显式地列出这些效果对理解和评价这些模式很有帮助。
5 设计模式分类
设计模式主要分为创建性模式( Creational Patterns)、结构性模式(Structural Patterns)、行为性模式(Behavioral Patterns)。
5.1创建性模式( Creational Patterns)
5.1.1 Net设计模式实例之简单工厂模式(Simple Factory Pattern)
简单工厂模式(Simple Factory Pattern)的优点是,工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖
5.1.2 Net设计模式实例之抽象工厂模式(Abstract Factory Pattern)
5.1.3 Net设计模式实例之单例模式( Singleton Pattern)
单例模式(Singleton Pattern),保证一个类只有一个实例,并提供一个访问它的全局访问点。单例模式因为Singleton封装它的唯一实例,它就可以严格地控制客户怎样访问它以及何时访问它。
5.1.4 Net设计模式实例之建造者模式(Builder Pattern)
5.1.5 Net设计模式实例之原型模式( Prototype Pattern)
浅复制,被复制的所有变量都还有与原来对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。深复制,把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象。
Net命名空间System提供了一个IConeable接口,此接口只有一个方法Clone(),只需要实现这个接口就可以实现原型模式(Prototype Pattern)了
5.2结构性模式(Structural Patterns)
5.2.1 Net设计模式实例之适配器模式(Adapter Pattern)
适配器模式,将一个类装换成客户期望的另外一个接口。Adapter模式统一了不兼容对象的接口,使的原本由于接口不兼容而不能工作的那些类可以一起工作。
5.2.2 Net设计模式实例之桥接模式( Bridge Pattern)
聚合(Aggregation),当对象A被加入到对象B中,成为对象B的组成部分时,对象B和对象A之间为聚合关系。聚合是关联关系的一种,是较强的关联关系,强调的是整体与部分之间的关系。
5.2.3Net设计模式实例之组合模式(Composite Pattern)
组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。解决整合与部分可以被一致对待问题。
5.2.4 Net设计模式实例之装饰者模式(Decorator Pattern)
装饰模式,给一个对象动态添加额外职责,这些职责需要由用户决定加入的方式和时机。装饰模式提供了“即插即用”的方式,在运行期间决定何时增加何种功能。就增加功能来说,装饰模式比生成子类更加灵活。
5.2.5 Net设计模式实例之外观模式(Façade Pattern)
外观模式,为子系统的一组接口提供一个统一的界面,此模式定义了一个高层接口,这一个高层接口使的子系统更加容易使用。外观模式可以解决层结构分离、降低系统耦合度和为新旧系统交互提供接口功能。
5.2.6 Net设计模式实例之享元模式( Flyweight Pattern)
内部状态,在享元对象的内部并且不会随环境改变而改变的共享部分。
5.2.7 Net设计模式实例之代理模式(Proxy Pattern)
代理模式(Proxy Pattern)对其他对象提供一种代理以控制对这个对象的访问。
5.3行为性模式(Behavioral Patterns)
Net设计模式实例之职责链模式(Chain Of Responsibility)
5.3.1Net设计模式实例之命令模式(Command Pattern)
命令模式(Command Pattern)将请求封装为一个对象,从而使你用不同的请求对客户进行参数化,对请求排队或纪录请求日志,以及支持可撤销的操作。当需要有撤销或者恢复操作时,可以考虑使用命令模式.
5.3.2Net设计模式实例之解释器模式(Interpreter Pattern)
5.3.3 Net设计模式实例之迭代器模式(Iterator Pattern)
5.3.4 Net设计模式实例之中介者模式(Mediator Pattern)
5.3.5 Net设计模式实例之备忘录模式(Memento Pattern)
备忘录模式(Memento Pattern),在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以就该对象恢复到原先保存的状态。
当系统功能比较复杂,而且需要记录历史属性以便当需要时做恢复动作。Originator可以根据保存的Memento信息还原到前一状态。
5.3.6Net设计模式实例之观察者模式(Observer Pattern)
5.3.7Net设计模式实例之状态模式(State Pattern)
Net设计模式实例之策略模式(Strategy Pattern)
5.3.8Net设计模式实例之模板方法模式(Template Mothed Pattern)
要完成在某一细节上层次一致的一个过程或一系列步骤,但个别步骤在更详细的层次上实现不同时,可以使用模版方法模式解决问题。
5.3.9Net设计模式实例之访问者模式(Visitor Pattern)
访问者模式表示一个作用于某对象结构中的个元素操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作. 访问者模式的目的是要把处理从数据结构分离出来
6 设计模式总结
至此,Net设计模式实例系列文章已经写完,由于个人能力有限,不免有些问题阐述的不清楚或者不是非常正确,望高手指点。再此感谢
Net设计模式实例系列文章总结[转]相关推荐
- 乐在其中设计模式(C#)系列文章索引
感谢原作者的整理:)以下转自http://www.cnblogs.com/webabcd/archive/2008/04/02/1134658.html 乐在其中设计模式(C#)系列文章索引 作者:w ...
- 经典博文--各系列文章
稳扎稳打Silverlight Silverlight 1.0 稳扎稳打Silverlight(1) - 1.0实例之电子表 稳扎稳打Silverlight(2) - 1.0实例之支持录音和回放的钢琴 ...
- 【C#】设计模式的学习征途系列文章目录(2019版)
Photo :Design Patterns 文 | Edison Zhou 2017年,我开始系统学习设计模式,参考了<大话设计模式>.<设计模式的艺术>等书籍,并通过C#语 ...
- .NET设计模式系列文章
.NET设计模式系列文章 最初写探索设计模式系列的时候,我只是想把它作为自己学习设计模式的读书笔记来写,可是写到今天,设计模式带给我的震撼,以及许多初学者朋友的热心支持,让我下定决心要把这个系列写完写 ...
- 收藏:TerryLee的.NET设计模式系列文章
正打算就设计模式的学习写点什么,到cnblogs一查发现关于设计模式的系列已经有很多了,就免了.看了一下数TerryLee的系列写的易懂,将目录收藏在此. .NET设计模式系列文章 http://te ...
- 设计模式系列文章的总结
经过最近一段时间对设计模式的学习和理解.我说下自己的收货吧! 组织语言的能力提高了 对设计模式的理解更进一步了 写代码时会更加关注可扩展与可复用,相关逻辑尽量用最少的代码实现 接口非常的关键,要多去使 ...
- UML建模系列文章总结
一.为什么要学习UML 二.UML的历史 三.UML的特点 四.UML中的视图 五.UML建模工具 六.UML的应用领域 七.UML的构成 1.需求阶段如何书写Use Case 2.设计阶段如何画用例 ...
- UML建模系列文章总结 (转载)
一.为什么要学习UML 二.UML的历史 三.UML的特点 四.UML中的视图 五.UML建模工具 六.UML的应用领域 七.UML的构成 1.需求阶段如何书写Use Case 2.设计阶段如何画用例 ...
- Oracle APEX 系列文章7:Oracle APEX 18.1 新特性
引言 千呼万唤始出来, Oracle APEX 18.1 新版本终于发布了,还不了解 Oracle APEX 是什么的同学请移步这里: Oracle APEX 系列文章1:Oracle APEX, 让 ...
最新文章
- 二值网络--Training Binary Weight Networks via Semi-Binary Decomposition
- struts2通过基于XML的配置实现校验没有提示信息
- 通过jquery-ui中的sortable来实现拖拽排序
- MySQL 主键相关操作
- centos7 搭建本地git_小白也能看懂,30 分钟搭建个人博客!
- java base server 状态_SQL Server:数据库陷入“恢复”状态 - SQL Server: Database stuck in “Restoring” state...
- 【算法笔记】扩展kmp算法(exkmp)
- java笔试之从单向链表中删除指定值的节点
- c语言设计题库及详解答案,(完整版)C语言程序设计题库及答案,推荐文档
- Java-输出100以内的质数
- 低代码平台在金融行业的OA解决方案
- 暴力破解zip,rar密码
- 第9章:多媒体基础知识
- SQLSERVER月份简写转数字
- [OpenCV练习题实现] 尝试找到一种方法来提取多个彩色对象,例如,同时提取红色,蓝色,绿色对象。
- 南安普顿大学人工智能硕士课程
- 敏捷(Agile)是什么?有哪些优缺点?敏捷落地需不需工具?
- 拼装机器人感想_对机器人搭建的认识及感悟
- 高德地图placesearch 搜索结果生成自定义marker
- KMP(字符串匹配)+字符串哈希
热门文章
- VMweare 典型创建 Kali Linux 虚拟机
- 大整数减法(信息学奥赛一本通-T1169)
- 求π的值(信息学奥赛一本通-T1156)
- 矩阵转置(信息学奥赛一本通-T1126)
- 打印字符(信息学奥赛一本通-T1021)
- 24 OB22无法修改公司代码的附加本位币从EUR到CNY
- 31 FI配置-财务会计-应收账款和应付账款-定义容差组(供应商)
- jwt认证机制优势和原理_微服务统一登录认证怎么做?JWT?
- tqdm使用(Python进度条)
- 一道题:给定一整数序列A1,A2,...,An(可能有负数),求A1到An的一个自序列,使得Ai到Aj的和最大。例如:整数序列-2,11,-4,13,-5,2,-5,-3,12,-9的最大子序列为21