C#设计模式总结

时间:2015-09-22 ┊ 阅读:7,985 次 ┊ 标签: 经验 , 分享 , 设计

设计模式这种东西,概念性太重,理解起来费劲,可是话又说回来了,如果没有再码农的世界里被需求反复修改的折腾,也不会深刻的认识到模式的重要性。
以下是多年前学习设计模式时候总结的,现在看来还是有收获的。(起码记住这些能把多数面试官说蒙。。。)

一、"开放-封闭"原则(OCP)
Open-Closed Principle原则讲的是:一个软件实体应当对扩展开放,对修改关闭)
二、 里氏代换原则(LSP))
Liskov Substitution Principle(里氏代换原则):子类型(subtype)必须能够替换它们的基类型。)
三、 依赖倒置原则(DIP) )
依赖倒置(Dependence Inversion Principle)原则讲的是:要依赖于抽象,不要依赖于具体。)
抽象不应当依赖于细节;细节应当依赖于抽象;要针对接口编程,不针对实现编程。)
四、 接口隔离原则(ISP))
接口隔离原则(Interface Segregation Principle)讲的是:使用多个专门的接口比使用单一的总接口总要好。换而言之,从一个客户类的角度来讲:一个类对另外一个类的依赖性应当是建立在最小接口上的。)
实现方法:)
1、 使用委托分离接口)
2、 使用多重继承分离接口)
五、 合成/聚合复用原则(CARP))
合成/聚合复用原则(Composite/Aggregate Reuse Principle或CARP)经常又叫做合成复用原则(Composite Reuse Principle或CRP),就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新对象通过向这些对象的委派达到复用已有功能的目的。)
简而言之,要尽量使用合成/聚合,尽量不要使用继承。)
区分"Has-A"与"Is-A")
"Is-A"是严格的分类学意义上定义,意思是一个类是另一个类的"一种"。而"Has-A"则不同,它表示某一个角色具有某一项责任。)
六、 迪米特法则(LoD))
迪米特法则(Law of Demeter或简写LoD)又叫最少知识原则(Least Knowledge Principle或简写为LKP),也就是说,一个对象应当对其它对象有尽可能少的了解。 迪米特法则与设计模式)
Facade模式、Mediator模式)
创建型模式种类 )
• Singleton单例模式,保证一个类仅有一个实例)
• Factory Method工厂方法模式,定义一个创建对象的接口,并控制用哪一个类进行实例化 )
• Abstract Factory–抽象工厂模式,创建一系列相关或相互依赖的对象 )
• Prototype–原型模式,通过拷贝现有对象来生成新对象(克隆方法))
• Builder–生成器模式,将构造对象实例的代码逻辑移到类的外部)
结构型模式 )
• 结构型模式涉及到如何组合类或对象,以获得更大的结构)
• 结构型类模式采用继承机制来组合接口或实现)
• 结构型对象模式描述了如何对一些对象进行组合,从而实现新功能的一些方法 )
Adapter适配器模式,将一个类的接口转换成客户希望的另外一个接口,使得原本由于)
接口不兼容而不能一起工作的那些类可以一起工作适配器(Adapter)模式)
•桥梁(Bridge)模式,将抽象部分与它的实现部分分离,使它们都可以独立地变化)
• Composite组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性合成(Composite)模式 • Decorator 装饰模式,动态地给一个对象添加一些额外的职责装饰(Decorator)模式)
• Facade 外观模式,为子系统中的一组接口提供一个一致的界面,使得这一子系统更加容易使用 )
)
• Flyweight 享元模式,运用共享技术有效地支持大量细粒度的对象享元(Flyweight)模式 )
• Proxy代理模式,为其他对象提供一种代理以控制对这个对象的访问代理(Proxy)模式)
行为型模式 )
• 行为型模式涉及到算法和对象间职责的分配)
• 行为型模式不仅描述对象或类的模式,还描述它们之间的通信模式,将注意力转移到对象间的联系方式上来)
行为型模式种类)
• Chain of responsibility– 职责链模式,使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系职责链(Chain of Responsibility)模式 • Command– 命令模式,将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作 • Interpreter 解释器模式,给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子)
• Iterator迭代器模式,提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示)
• Mediator中介者模式,用一个中介对象来封装一系列的对象交互)
• Memento 备忘录模式,在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态 • Observer观察者模式,定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新(事件))
• State状态模式,允许一个对象在其内部状态改变时改变它的行为)
• Strategy– 策略模式,定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换)
• TemplateMethod 模板方法模式,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中(使用继承,把公共的方法放到基类就属于模板))
• Visitor访问者模式,表示一个作用于某对象结构中的各元素的操作 )

Lighthouse.jpg

文章评论

仅有1条评论

  1. 写的不错哦。

添加新评论

温馨提醒:如果您是第一次在本站留言,需要审核后才能显示哦!

相关文章

Whatsapp只能查看最近三天的聊天记录了怎么办?

Whatsapp只能查看最近三天的聊天记录了怎么办?

今天突然发现电脑上的WhatsApp只能查看最近3天的聊天记录了,显示要查看3天前的记录请到手机上查看。很是吃惊,以前一直是所有记录都自动同步到电脑版的啊,不论换电脑了还是换手机了,聊天记录从来没丢过。 查询一翻也没有找出来原因,怎么也同步不过去。 电脑版app重新安装了,也不行。 有个方法说...
阅读全文>>
ValueError: Error getting directory

ValueError: Error getting directory

ssl证书过期了 明明自动renew的 然后看log已经好久没更新成功了 查半天是当前server不信任远程连接 只能自己改代码 报错: 21-12-17 13:01:11 Generate CSR...amkevin.csr amkevin.csr generated. /home/www...
阅读全文>>
网页路径中的'.'和'..'还有'./'和'../'区别

网页路径中的'.'和'..'还有'./'和'../'区别

. 表示当前目录 .. 表示当前目录的上一级目录。 ./表示当前目录下的某个文件或文件夹,视后面跟着的名字而定 ../表示当前目录上一级目录的文件或文件夹,视后面跟着的名字而定。 例如: 文件夹 a 下面有 文件夹b c 和文件 d。 文件夹b下面有e.php 和文件f。 则e中的 . 表示...
阅读全文>>
Introduction to ILE RPG Activation Groups

Introduction to ILE RPG Activation Groups

Learn how activation groups can help your ILE RPG programs run more efficiently, how to specify the type of group to use, and closing and reclaimin...
阅读全文>>
popup.js怎么和content.js通信?[JQuery]

popup.js怎么和content.js通信?[JQuery]

这两天为了实现一个谷歌浏览器插件功能,研究了半天怎么让插件来改特定网页里的特定字段的值,而这个值又来自popup的网页预先设定,下一步实现动态加载,可以让更多组实现便利。 目的很简单,我们有一个list,需要填到网页的某个字段,当然是好几个,这些值是设定好的,网页系统我们没法改,input想...
阅读全文>>