随笔分类 -  软件设计模式

总结用到的23种设计模式
摘要:备忘录(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态。 Originator(发起人):负责创建一个备忘录Memento,用以记录当前时刻它的内部状态,并可使用备忘录恢复内部状态。Originator可根据需要 阅读全文
posted @ 2021-10-07 12:30 HelloWorld庄先生 阅读(29) 评论(0) 推荐(0) 编辑
摘要:命令模式(Command),将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 优点: 能够比较容易的设计一个命令队列 在需要的情况下,可以较容易的将命令计入日志 允许接收请求的一方决定是否要否决请求 可以容易的实现对请求的撤销和重做 阅读全文
posted @ 2021-10-06 16:34 HelloWorld庄先生 阅读(19) 评论(0) 推荐(0) 编辑
摘要:观察者模式又称为发布-订阅模式,定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题。这个主题在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己。它是依赖倒置原则的体现。 客户端 static void Main(string[] args) { Boss YanXianZe 阅读全文
posted @ 2021-10-06 15:25 HelloWorld庄先生 阅读(33) 评论(0) 推荐(0) 编辑
摘要:中介者模式(Mediator):用一个中介对象来封装一系列的对象交互。中介者使得各对象不需要显示的相互引用,从而使其耦合松散,而且可以独立的改变它们之间的交互。 尽管将一个系统分割成许多对象通常可以增加其可复用性,但是对象相互连接的激增又会降低其可复用性,这是因为大量的连接使得一个对象不可能在没有其 阅读全文
posted @ 2021-10-06 13:34 HelloWorld庄先生 阅读(36) 评论(0) 推荐(0) 编辑
摘要:职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 好处: 接收者和发送者都没有对方的明确信息,且链中的对象自己也并不知道链的结构。结果是职责链 阅读全文
posted @ 2021-10-05 20:23 HelloWorld庄先生 阅读(23) 评论(0) 推荐(0) 编辑
摘要:享元模式(Flyweight),运用共享技术有效的支持大量细粒度的对象。 什么时候使用享元模式 如果一个应用程序使用了大量的对象,而大量的这些对象造成了很大的存储开销时就可以考虑使用;还有就是对象的大多数状态可以外部状态,如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象,此时可以考 阅读全文
posted @ 2021-10-05 19:17 HelloWorld庄先生 阅读(39) 评论(0) 推荐(0) 编辑
摘要:原型模式(Prototype):用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 原型模式其实就是从一个对象(而不是通过类的实例化)再创建另一个可定制的对象,而且不需要知道任何创建的细节。 一般在初始化的信息不发生变化的情况下,克隆是最好的办法,这既隐藏了对象创建的细节,又对性能是很 阅读全文
posted @ 2021-10-04 22:44 HelloWorld庄先生 阅读(26) 评论(0) 推荐(0) 编辑
摘要:模板方法,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤(它是通过继承和多态来实现的)。 当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现,我们通过模板方法模式把这些行为搬移到单一的地 阅读全文
posted @ 2021-10-03 22:31 HelloWorld庄先生 阅读(24) 评论(0) 推荐(0) 编辑
摘要:待填 阅读全文
posted @ 2021-09-19 17:35 HelloWorld庄先生 阅读(9) 评论(0) 推荐(0) 编辑
摘要:组合模式:是将对象组合成树形结构一表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。 组合模式示例代码如下: class Program { static void Main(string[] args) { Composite root = new Composi 阅读全文
posted @ 2021-09-19 17:35 HelloWorld庄先生 阅读(32) 评论(0) 推荐(0) 编辑
摘要:转载自类与类之间的几种关系 - 残剑_ - 博客园 (cnblogs.com) 1.继承关系 继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力。 2.实现关系 实现指的是一个class类实现interface接口(可以是多个)的功能,实现 阅读全文
posted @ 2021-09-04 16:40 HelloWorld庄先生 阅读(360) 评论(0) 推荐(0) 编辑
摘要:桥接模式定义:将抽象部分与它的实现部分分离,使他们都可以独立的变化。主要运用的是“合成/聚合复用原则”。 使用合成/复用原则的好处:有助于你保持每个类被装转,并被集中在当个任务上,这样类和类继承层次会保持较小规模,并且不太可能增长为不可控制的庞然大物 abstract class HandsetSo 阅读全文
posted @ 2021-09-04 10:57 HelloWorld庄先生 阅读(27) 评论(0) 推荐(0) 编辑
摘要:代填 阅读全文
posted @ 2021-09-04 10:56 HelloWorld庄先生 阅读(13) 评论(0) 推荐(0) 编辑
摘要:定义:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得一个子系统更加容易使用。 基本代码: 三个子系统的类 class SubSystem1 { public void MethodA() { Console.WriteLine("子系统方法1”); } } class 阅读全文
posted @ 2021-09-04 10:55 HelloWorld庄先生 阅读(17) 评论(0) 推荐(0) 编辑
摘要:定义:将一个类的接口转换成客户希望的另外的一个接口。Adapter模式使得原本由于接口不兼容二不能一起工作的那些类可以一起工作。 适配器的使用场景:在想使用一个已经存在的类,但如果它的接口,也就是它的方法和你的要求不相同时【并且双方都不太容易修改】就应该使用适配器模式,通常用在软件开发后期或维护期。 阅读全文
posted @ 2021-09-04 10:54 HelloWorld庄先生 阅读(23) 评论(0) 推荐(0) 编辑
摘要:定义:它定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化不会影响到使用算法的客户。 策略模式是一种定义一系列算法的方法,从概念上来家看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有算法,减少了各种算法类于使用算法之间的耦合。 基本代码如下: st 阅读全文
posted @ 2021-09-02 23:09 HelloWorld庄先生 阅读(48) 评论(0) 推荐(0) 编辑
摘要:定义:动态的给一个对象添加游戏欸额外的职责,就增加功能来说,装饰模式比生成子类更灵活。 注意他与建造者的区别:它的建造过程是不稳定的,二建造者的建造过程是稳定的。 Component定义一个对象接口,可以给这些对象动态的添加职责。 ConcreteComponent 是定义了一个具体的对象,也可以给 阅读全文
posted @ 2021-09-02 23:09 HelloWorld庄先生 阅读(26) 评论(0) 推荐(0) 编辑
摘要:定义:如果将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示。 什么时候使用建造者? 主要用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。 将一个复杂对象的构建与它的表示分开,使得同样的构建过程可以创建不同的表示。如果我们 阅读全文
posted @ 2021-09-02 23:08 HelloWorld庄先生 阅读(39) 评论(0) 推荐(0) 编辑
摘要:工厂方法模式每个具体工厂类只完成单个实例的创建,所以它具有很好的可扩展性。但是在实际的应用中,一个工厂不止会创建单一的产品,而是一系列的产品,这就引入了抽象工厂的概念。解决涉及多个产品系列的问题。 大家都知道利用抽象工厂模式可以切换数据库的访问,那具体怎么做呢?这里介绍两种方式:利用简单工厂改进传统 阅读全文
posted @ 2021-09-02 23:02 HelloWorld庄先生 阅读(36) 评论(0) 推荐(0) 编辑
摘要:工厂方法模式(Factory Method) 定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延续到其子类中。 工厂方法模式是简单工厂的扩展,工厂方法把简单工厂的内部逻辑判断转移到了客户端进行,想要增加功能,以前是修改工厂类,现在是修改客户端。 工厂方法模式克服了简单工 阅读全文
posted @ 2021-09-01 23:21 HelloWorld庄先生 阅读(31) 评论(0) 推荐(0) 编辑