C#设计模式
文章平均质量分 73
编程菜鸟0604号
编程菜鸟,来此为了记录自己一步一步成长的过程!
展开
-
(32)C#设计模式——适配器模式(Adapter Pattern)
引言在实际的开发过程中,由于应用环境的变化,我们需要的实现在新环境中没有现存对象可以满足,但是其他环境却存在这样现存的对象。如何在新环境中调用“现存的对象”呢?采用适配器模式可以解决。适配器模式使得新环境中不需要去重复实现已经存在了的实现,而很好的把现有的对象(指原来环境中的现有对象)加入到新环境中来使用。详细介绍定义:把一个类的接口变换成客户端所期待的另一种接口,从而使得原本接口不匹...原创 2018-08-30 17:10:29 · 1838 阅读 · 0 评论 -
(36)C#设计模式—— 外观模式(Facade Pattern)
引言在软件开发过程中,客户端经常会与复杂系统的内部子系统进行耦合,从而导致客户端程序跟着子系统的变化而变化,然而为了将复杂系统的内部子系统与客户端之间的以来解耦,从而就有了外观模式。详细介绍定义:外观模式提供一个统一的接口,用来访问子系统中的一群接口。外观模式定义了一个高层接口,让子系统容易试用。使用外观模式时,我们创建了一个统一的类,用来包装子系统中一个或多个复杂的类,客户端可以直接...原创 2018-09-10 16:47:03 · 184 阅读 · 0 评论 -
(44)C#设计模式——状态者模式(State Pattern)
介绍每个对象都有其对的状态,而每个状态有对应一些相应的行为,如果多个对象有多个状态,那么就会对应很多种行为。那么对这些状态的判断和根据状态完成的行为,就会导致多重条件语句,并且如果添加一种新的状态时,需要更改之前的代码。这样设计显然违背了开闭原则。状态模式正是用来解决这样的问题的。状态模式将每种状态对应的行为抽象出来成为单独新的对象,这样状态的变化不再依赖于对象内部的行为。定义状态模式:允许...原创 2018-09-19 14:52:18 · 233 阅读 · 0 评论 -
(45)C#设计模式—— 策略者模式(Stragety Pattern)
定义在现实生活中,策略模式的例子也非常常见,例如,中国的所得税,分为企业所得税、外商投资企业或外商企业所得税和个人所得税,针对这3种所得税,针对每种,所计算的方式不同,个人所得税有个人所得税的计算方式,而企业所得税有其对应的计算方式。如果不采用策略模式来实现这样一个需求,可能我们会定义一个所得税类,该类有一个属性来标记所得税的类型,并且有一个计算税收的方法,在该方法体内需要对税收类型进行判断,通...原创 2018-09-19 15:23:19 · 233 阅读 · 0 评论 -
(41)C#设计模式——迭代器模式(Iterator Pattern)
介绍迭代器是针对集合对象而产生的,对于 集合对象而言,必然涉及到集合元素的添加、删除等操作,同时肯定也支持遍历集合元素的操作,我们可以把遍历操作也放在集合对象中,但这样的话,集合对象就承担太多的责任了,面向对象中有一条设计原则是单一职责原则,所以我们要尽可能的分离这些职责,用不同的类去承担不同的责任。迭代器模式就是来承担遍历集合元素的职责。定义迭代器模式提供了一种方法顺序访问一个聚合对...原创 2018-09-14 14:34:48 · 704 阅读 · 0 评论 -
(37)C#设计模式——享元模式(Flyweight Pattern)
引言在软件开发过程中,如果我们要重复使用某个对象的时候,重复使用new创建这个对象的话,这样我们在内存就要多次地去申请内存空间,这样可能会出现内存使用越来越多的情况,这种问题是非常严重的,使用享元模式可以结局这个问题。详细介绍上面说了,享元模式可以解决重复使用对象导致内存使用越来越多的问题,先分析一下如何去解决。上面的问题就是重复创建统一个对象,如果我们去解决这个问题肯定会这样想:既然...原创 2018-09-11 11:12:56 · 301 阅读 · 0 评论 -
(42)C#设计模式——观察者模式(Observer Pattern)
定义从生活中的例子可以看出,只要对订阅号关注的客户端,如果订阅号有什么更新,就会直接推送给订阅了的客户端。从中,我们可以理解观察者模式的定义。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听一个主题对象,这个主题对象在状态发生改变时,会通知所有观察者对象,使它们能够自动更新自己的行为。结构从上面观察者模式的定义和生活中的例子,我们知道了观察者模式中首先会存在两个对象,...原创 2018-09-14 16:43:17 · 281 阅读 · 0 评论 -
(43)C#设计模式——中介者模式(Mediator Pattern)
定义从生活中的例子可以看出,不论是QQ群还是QQ游戏,他们都是充当一个中间平台,QQ用户可以登录这个中间平台与其他QQ用户交流,如果没有这些中间平台,我们想与朋友聊天的话,可能就需要面对面才行了。电话,短信也是一样的,有了这个中间平台。每个用户都不用直接依赖于其他用户,只需要依赖这个平台就可以了,一切操作都由中间平台去分发。中介者模式,定义了一个中介对象来封装一系列对象之间的交互关系。中介...原创 2018-09-14 17:19:30 · 413 阅读 · 0 评论 -
(46)C#设计模式—— 责任链模式
引言在现实生活中,有很多请求并不是一个人说了算,例如面试时的工资,地狱1万的可能技术经理就可以决定了,但是1万到1万5的公司可能技术经理就没这个权利批准,可能就需要请求技术总监的批准,所以面试的话,经常会有面试者说,你这个薪水我觉得你这技术可以拿这个薪水的,但是还需要技术总监的批准等话。这个例子引出了我们要介绍的责任链模式。定义从生活中的例子可以看出,某个请求需要几个人的审批,即使技术经理审...原创 2018-09-20 14:53:39 · 468 阅读 · 0 评论 -
(47)C#设计模式—— 访问者模式(Vistor Pattern)
定义访问者模式是封装一些施加于某种数据结构之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变。访问者模式适用于数据结构相对稳定的系统,它把数据结构和作用于数据结构之上的操作之间的耦合度降低,使得操作集合可以相对自由地改变。数据结构的每一个节点都可以接受一个访问者的调用,此节点访问者对象传入节点对象,而访问者对象则反过来执行节点对象的操作。这样的过长叫做“双重分流”。节点...原创 2018-09-20 16:01:04 · 278 阅读 · 0 评论 -
(48)C#设计模式—— 备忘录模式(Memento Pattern)
引言今天介绍的备忘录模式与命令模式有些相似,不同的是,命令模式保存的是发起人的具体命令(命令对应的是行为),而备忘录模式保存的是发起人的状态(状态对应的数据结构,如属性)。定义从字面意思就可以明白,备忘录模式就是对某个类的状态进行保存,等到需要回复的时候,可以从备忘录中进行恢复。生活中这样的例子经常看到,如备忘电话通讯录,备份数据库等。备忘录模式的具体定义:在不破坏封装的前提下,不会一个对...原创 2018-09-20 16:58:00 · 413 阅读 · 0 评论 -
(35)C#设计模式—— 组合模式(Composite Pattern)
引言在软件开发过程中,我们经常会遇到处理简单对象和复合对象的情况,例如对操作系统中目录处理就是这样的一个例子,因为目录可以包括单独的文件,也可以包括文件夹,文件夹是由文件组成的,由于简单对象和复合对象在功能上的区别,导致在操作过程中必须区分简单对象和复合对象,这样就会导致客户调用带来不必要的麻烦。然而作为客户,希望能够始终一致地对待简单对象和复合对象。这样就可以采用组合模式组合模式详细介绍...原创 2018-09-03 15:28:12 · 204 阅读 · 0 评论 -
(40)C#设计模式——命令模式(Command Pattern)
定义命令模式属于对象的行为模式。命令模式是把一个操作或者行为抽象到一个对象中,通过命令的抽象化使发出命令的责任和执行命令的责任分离开。命令模式的实现可以提供命令的撤销和回复功能结构既然命令模式是把发出命令的责任和执行命令的责任分隔开,那么中间就必须有某个对象来帮助发出命令者来传达命令,使得执行命令的接收者可以收到命令并执行命令。例如,开学了,院领导说计算机学院要进行军训,计算机学院的学...原创 2018-09-11 15:26:46 · 867 阅读 · 1 评论 -
(29)C#设计模式——模板方法
当我们去银行存钱的时候,银行会给你一张存款单,这张存款单就是一个模板,把一些公共的内容提取出来,留下部分内容让用户来填写。在软件系统中,将多个类的共有内容提取到一个模板中的思想就是模板方法模式的思想。模板方法模式就是基于代码复用技术,在模板方法模式中,可以将相同的代码放在父类中,而将不同的方法放在不同的子类中。在模板方法模式中,需要准备一个抽象类,将部分逻辑以具体方法以及具体构造函数形式实...原创 2018-08-28 14:42:36 · 289 阅读 · 0 评论 -
(28)C#设计模式——抽象工厂
概述抽象工厂模式的意图是为创建一组相关或相互依赖对象提供了一个接口,而且不需指定它们的具体类。抽象工厂可以向客户提供一个接口,使客户可以在不必指定产品具体类型的情况下,创建多个产品家族中的对象,它强调“系列对象”的变化。抽象工厂在开发中使用的频率很高。角色与结构抽象工厂:声明一个创建具体产品对象的操作接口(实际上是创建一个具体工厂的借口)具体工厂:实现创建具体产品对象的操作...原创 2018-08-28 14:16:47 · 299 阅读 · 0 评论 -
(27)C#设计模式——工厂方法
概述工厂方法模式是类的创建模式,其用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。工厂方法是简单工厂进一步的抽象和推广。由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。在工厂方法模式中,核心的工厂类不在负责所有产品的创建,而是将具体创建工作交给子类来完成。这个核心类仅仅负责人给吃具体工厂必须实现的接口,而不接触哪一个产品类被实例化这种细节。...原创 2018-08-28 13:42:25 · 359 阅读 · 2 评论 -
(26)C#设计模式——简单工厂
定义简单工厂模式:定义一个Factoryl类,可以根据参数的不同返回不同类的实例,被创建的实例通常都有共同的父类。又称为静态工厂模式,Factory类为静态类或包含静态方法。实质上是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类的实例。参与者Product:抽象产品类,将具体产品类公共的代码进行抽象和提取后封装在一个抽象产品类中。ConcreteProduct:具体产品类...原创 2018-08-25 15:49:51 · 416 阅读 · 0 评论 -
(25)C#设计模式——单例模式
什么是单例模式?从“单例”的字面意思上理解为:一个类只有一个实例。所以单例模式也就是保证一个类只有一个实例的一种实现方法。官方给出的定义:确保一个类只有一个实例,并提供一个全局访问点。单例模式的实现思路单例模式的实现代码很简单,也很容易看懂,但每次使用都会想为什们前人会这样实现单例模式呢?他们如何思考的呢?我们从单例模式的概念入手,可以把概念分为两部分:(1)确保一个类只有一个实例...原创 2018-08-25 14:25:20 · 399 阅读 · 0 评论 -
(30)C#设计模式——建造者模式(Builder Pattern)
引言在软件系统中,有时需要创建一个复杂对象,并且这个复杂对象由其各部分子对象通过一定的步骤聚合而成。例如一个采购系统中,如果需要采购员去采购一批电脑,在这个实际需求中,电脑就是一个复杂的对象,它是由CPU、主板、硬盘、显卡、机箱等组装而成的,如果此时让采购员一台一台电脑去组装的话真是要累死他了。这里就可以用建造者模式来解决这个问题。我们可以把电脑的各个组件的组装过过场封装到一个建造者对象里,此...原创 2018-08-28 16:08:20 · 301 阅读 · 0 评论 -
(31)C#设计模式——原型模式(Prototype Parrern)
引言在软件系统中,当创建一个类的实例的过程很昂贵或很复杂,并且我们需要创建多个这样类的实例时,如果我们使用new操作符去创建这样的类实例,这未免会增加创建类的复杂度和耗费更多的内存空间,因为这样在内存中分配多个一样的类实例对象。如果采用工厂模式来封装类创建这样的系统的话,随着产品类的不断增加,导致子类的数量不断增多,反而增加了系统复杂程度,所以使用工程模式来封装类创建过程并不合适,可以使用原型...原创 2018-08-28 17:09:55 · 688 阅读 · 0 评论 -
(33)C#设计模式—— 桥接模式(Bridge Pattern)
引言用一个电视遥控器的例子来引出桥接模式解决的问题。我们每个牌子的电视机都有一个遥控器,此时我们能想到的一个设计是——把遥控器作为一个抽象类,抽象类中提供遥控器的所有实现,其他具体电视品牌的遥控器都继承这个抽象类。这样的实现使得每部不同型号的电视机都有自己的遥控器实现。这样的设计对于电视机的改变可以很好的应对,只需要添加一个派生类就好,但随着时间的推移,用户需要改变遥控器的功能,此时就需要修改...原创 2018-08-31 15:23:16 · 302 阅读 · 0 评论 -
(34)C#设计模式——装饰者模式(Decorator Pattern)
引言在软件开发中,我们经常想要对一类对象添加不同的功能,例如要给手机添加贴膜、挂件、外壳等。如果此时使用继承来实现的话,我们就需要定义无数的类,这样会导致“子类爆炸”的问题。为了解决这个问题,可以使用装饰者模式来动态地给一个对象添加额外的职责。装饰者模式的详细介绍定义装饰者模式以对客户透明的方式动态地给一个对象附加上更多的职责,装饰者模式相比生成子类可以更灵活地增加功能。具体实...原创 2018-08-31 16:05:03 · 360 阅读 · 0 评论 -
(38)C#设计模式——代理模式(Proxy Pattern)
引言在软件开发过程中,有些对象有时候会由于网络或其他障碍,以至于不能够或者不能直接访问到这些对象,如果直接访问对象给系统带来不必要的复杂性,这时候可以在客户端和目标对象之间增加一层中间层,让代理对象代替目标对象,然后客户端只需要访问代理对象,由代理对象去帮我们请求目标对象并返回结果给客户端,这就是代理模式的实现思路。详细介绍代理模式按照使用目的可以分为以下几种:远程(Remote)...原创 2018-09-11 14:30:48 · 253 阅读 · 0 评论 -
(50)C#设计模式总结
创建型模式创建型模式就是用来创建对象的模式,抽象了实例化的过程。所有的创建型模式都有两个共同点。都将系统使用哪些具体类的信息封装起来隐藏了这些类实例时如何被创建和组织的单例模式解决的是对象实例化的个数问题,比如抽象工厂中的工厂,对象池等,除了Singleton之外,其他创建型模式解决的都是new所带来的耦合关系。单例模式指的是确保某一个类只有一个实例,并提供一个全局的访问点。实现要...原创 2018-09-28 14:22:59 · 496 阅读 · 0 评论