CSharp23设计模式
CSharp23设计模式
sinolover
完成项目,就要软硬兼施
展开
-
【转】面试:一个单例模式,足以把你秒成渣
去面试(对,又去面试)问:单例模式了解吧,来,拿纸和笔写一下单例模式。我心想,这TM不是瞧不起人吗?我编程十年,能不知道单例模式。答:(.net 平台下)单例模式有两种写法:第一种:饥饿模式,关键点,static readonlypublic static readonly SingletonSimple Instance = new SingletonSimple();第二种:懒加载模式,关键点,lock + 两次判断 static readonly ob原创 2020-12-08 11:11:41 · 251 阅读 · 0 评论 -
【转】设计模式 ( 十七) 状态模式State(对象行为型)
设计模式 ( 十七) 状态模式State(对象行为型)1.概述在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理。最直接的解决方案是将这些所有可能发生的情况全都考虑到。然后使用if... ellse语句来做状态判断来进行不同情况的处理。但是对复杂状态的判断就显得“力不从心了”。随着增加新的状态或者修改一个状体(if else(或switch case)语句的增多或者修改)可能会引起很大的修改,而程序的可读性,扩展性也会变得很弱。维护也会很麻烦。那么我们就需要考虑实现只修改自身状态的.原创 2020-12-07 09:45:28 · 261 阅读 · 0 评论 -
21适配器模式(Adapter Pattern)
适配(转换)的概念无处不在......适配,即在不改变原有实现的基础上,将原先不兼容的接口转换为兼容的接口。例如:二转换为三箱插头,将高电压转换为低电压等。动机(Motivate): 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。 那么如何应对这种“迁移的变化”?如何既能利用现有对象的...原创 2020-01-21 09:20:53 · 208 阅读 · 0 评论 -
41状态模式(State Pattern)
对象状态影响对象行为: 对象拥有不同的状态,往往会行使不同的行为... 动机: 在软件构建过程中,某些对象的状态如果改变以及其行为也会随之而发生变化,比如文档处于只读状态,其支持的行为和读写状态支持的行为就可能完全不同。 如何在运行时根据对象的状态来透明更改对象的行为?而不会为对象操作和状态转化之间引入紧耦合?意图:允许一个对象在其...原创 2020-01-23 09:30:55 · 368 阅读 · 0 评论 -
40访问者模式(Visitor Pattern)
类层次结构的变化: 类层次结构中可能经常由于引入新的操作,从而将类型变得脆弱... 动机: 在软件构建过程中,由于需求的改变,某些类层次结构中常常需要增加新的行为(方法),如果直接在基类中做这样的更改,将会给子类带来很繁重的变更负担,甚至破坏原有设计。 如何在不更改类层次结构的前提下,在运行时根据需要透明地为类层次结构上...原创 2020-01-22 10:39:57 · 188 阅读 · 0 评论 -
39策略模式(Strategy Pattern)
算法与对象的耦合: 对象可能经常需要使用多种不同的算法,但是如果变化频繁,会将类型变得脆弱... 动机: 在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担。 如何在运行时根据需要透明地更改对象的算法?将算法与对象本身解耦,从而避免上述问题?意图:...原创 2020-01-22 10:39:53 · 243 阅读 · 0 评论 -
38备忘录模式(Memento Pattern)
对象状态的回溯: 对象状态的变化无端,如何回溯/恢复对象在某个点的状态? 动机: 在软件构建过程中,某些对象的状态在转换过程中,可能由于某种需要,要求程序能够回溯到对象之前处于某个点时的状态。如果使用一些公有接口来让其他对象得到对象的状态,便会暴露对象的细节实现。 如何实现对象状态的良好保存与恢复?但同时又不会因此而破坏对象本...原创 2020-01-22 10:39:45 · 198 阅读 · 0 评论 -
37职责链模式(Chain of Responsibility Pattern)
动机(Motivate): 在软件构建过程中,一个请求可能被多个对象处理,但是每个请求在运行时只能有一个接受者,如果显示指定,将必不可少地带来请求发送者与接受者的紧耦合。 如何使请求的发送者不需要指定具体的接受者?让请求的接受者自己在运行时决定来处理请求,从而使两者解耦。意图(Intent): 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对...原创 2020-01-22 10:39:39 · 216 阅读 · 0 评论 -
36中介者模式(Mediator Pattern)
依赖关系的转化: 动机(Motivate):在软件构建过程中,经常会出现多个对象互相关联交互的情况,对象之间常常会维持一种复杂的引用关系,如果遇到一些需求的更改,这种直接的引用关系将面临不断的变化。 在这种情况下,我们可使用一个“中介对象”来管理对象间的关联关系,避免相互交互的对象之间的紧耦合引用关系,从而更好地抵御变化。意图(Intent): 用一...原创 2020-01-22 10:39:22 · 203 阅读 · 0 评论 -
35解释器模式(Interpreter Pattern)
动机(Motivate): 在软件构建过程中,如果某一特定领域的问题比较复杂,类似的模式不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化。 在这种情况下,将特定领域的问题表达为某种文法规则下的句子,然后构建一个解释器来解释这样的句子,从而达到解决问题的目的。意图(Intent):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释...原创 2020-01-22 10:39:23 · 184 阅读 · 0 评论 -
34观察者模式(Observer Pattern)
动机(Motivate):在软件构建 过程中,我们需要为某些对象建立一种“通知依赖关系” --------一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化。使用面 向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。意图(Intent):定义对象间的一种...原创 2020-01-22 10:39:08 · 214 阅读 · 0 评论 -
33迭代器模式(Iterator Pattern)
动机(Motivate):在软件构建过程中,集合对象内部结构常常变化各异。但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码透明地访问其中包含的元素;同时这种“透明遍历”也为“ 同一种算法在多种集合对象上进行操作”提供了可能。 使用面向对象技术将这种遍历机制抽象为“迭代器对象”为“应对变化中的集合对象”提供了一种优雅的方法。意图(Intent):提...原创 2020-01-22 10:39:02 · 291 阅读 · 0 评论 -
32命令模式(Command Pattern)
耦合与变化: 耦合是软件不能抵御变化灾难的根本性原因。不仅实体对象与实体对象之间存在耦合关系,实体对象与行为操作之间也存在耦合关系。动机(Motivate):在软件系统中,“行为请求者”与“行为实...原创 2020-01-22 10:39:04 · 227 阅读 · 0 评论 -
31模板方法(Template Method)
无处不在的Template Method 如果你只想掌握一种设计模式,那么它就是Template Method!动机(Motivate): 变化 -----是软件设计的永恒主题,如何管理变化带来的复杂性?设计模式的艺术性和复杂度就在于如何分析,并发现系统中的变化和稳定点,并使用特定的设计方法来应对这种变化。意图(Intent):定义一个操作中的算法的骨架,而将一些...原创 2020-01-22 10:38:56 · 186 阅读 · 0 评论 -
27代理模式(Proxy Pattern)
直接与间接: 人们对复杂的软件系统常有一种处理手法,即增加一层间接层,从而对系统获得一种更为灵活、满足特定需求的解决方案。 动机(Motivate):...原创 2020-01-21 09:21:37 · 912 阅读 · 0 评论 -
26享元模式(Flyweight Pattern)
面向对象的代价 面向对象很好地解决了系统抽象性的问题,同时在大多数情况下,也不会损及系统的性能。但是,在某些特殊的应用中下,由于对象的数量太大,采用面向对象会给系统带来难以承受的内存开销。比如:图形应用中的图元等对象、字处理应用中的字符对象等。 动机(Motivate): 采用纯粹对象方案的问题在于大量细粒度的对...原创 2020-01-21 09:21:31 · 220 阅读 · 0 评论 -
25外观模式(Facade Pattern)
动机(Motivate):在软件开发系统中,客户程序经常会与复杂系统的内部子系统之间产生耦合,而导致客户程序随着子系统的变化而变化。那么如何简化客户程序与子系统之间的交互接口?如何将复杂系统的内部子系统与客户程序之间的依赖解耦?意图(Intent):为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 ...原创 2020-01-21 09:21:26 · 247 阅读 · 0 评论 -
24组合模式(Composite Pattern)
动机(Motivate): 组合模式有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。意图(Intent):将对象组合成树形结构以表示“部分-整体”的层次结构。Composite模式使得用户对单个对象和组合对象的使用具有一致性。 ...原创 2020-01-21 09:21:12 · 317 阅读 · 0 评论 -
23装饰模式(Decorator Pattern)
子类复子类,子类何其多 假如我们需要为游戏中开发一种坦克,除了各种不同型号的坦克外,我们还希望在不同场合中为其增加以下一种或多种功能;比如红外线夜视功能,比如水陆两栖功能,比如卫星定位功能等等。按类继承的作法如下:1//抽象坦克2publicabstractclassTank3{4publicabstractvoidSho...原创 2020-01-21 09:21:14 · 224 阅读 · 0 评论 -
22桥接模式(Bridge Pattern)
动机(Motivate):在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?意图(Intent):将抽象部分与实现部分分离,使它们都可以独立的变化。 ------《设计模式...原创 2020-01-21 09:21:01 · 225 阅读 · 0 评论 -
15原型模式(Prototype)
依赖关系倒置: 动机(Motivate): 在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口。 如何应对这种变化?如何向“客户程序(使用这些对象的程序)"隔离出“这些易变对象”,从而使得“依赖这些易变对象的客户程序”不随着需求改变而改变?意图(Intent):用原...原创 2020-01-21 09:19:04 · 157 阅读 · 0 评论 -
14工厂方法模式(Factory Method)
耦合关系: 动机(Motivation): 在软件系统中,由于需求的变化,"这个对象的具体实现"经常面临着剧烈的变化,但它却有比较稳定的接口。 如何应对这种变化呢?提供一种封装机制来隔离出"这个易变对象"的变化,从而保持系统中"其它依赖的对象"不随需求的变化而变化。意图(Intent): 定义一个用户创建对象的接口,让子类决定实例哪一个类。Factory Me...原创 2020-01-21 09:19:06 · 252 阅读 · 0 评论 -
13建造者模式(Builder)
Builder模式的缘起: 假设创建游戏中的一个房屋House设施,该房屋的构建由几部分组成,且各个部分富于变化。如果使用最直观的设计方法,每一个房屋部分的变化,都将导致房屋构建的重新修正.....动机(Motivation): 在软件系统中,有时候面临一个"复杂对象"的创建工作,其通常由各个部分的子对象用一定算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但...原创 2020-01-21 09:18:55 · 156 阅读 · 0 评论 -
12抽象工厂(Abstract Factory)
常规的对象创建方法://创建一个Road对象Roadroad=newRoad();new 的问题: 实现依赖,不能应对“具体实例化类型”的变化。解决思路: 封装变化点-----哪里变化,封装哪里 潜台词: 如果没有变化,当然不需要额外的封装!工厂模式的缘起 变化点在“对象创建”,因此就封装“对象创建” 面向接口编程----依赖接口,而非依赖实...原创 2020-01-20 17:31:10 · 281 阅读 · 0 评论 -
11单件模式(Singleton Pattern)
创建型模式---单件模式(Singleton Pattern)动机(Motivation): 在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。 如何绕过常规的构造器,提供一种机制来保证一个类只创建一个实例? 这应该是类设计者的责任,而不是类使用者的责任。结构图:意图: 保证一个类仅有...原创 2020-01-20 17:30:24 · 193 阅读 · 0 评论 -
C#设计模式(23种设计模式)
创建型:1.单件模式(Singleton Pattern)2.抽象工厂(Abstract Factory)3.建造者模式(Builder)4.工厂方法模式(Factory Method)5.原型模式(Prototype)结构型:6.适配器模式(Adapter Patt...原创 2020-01-20 17:29:44 · 835 阅读 · 0 评论