自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 问答 (1)
  • 收藏
  • 关注

原创 (50)C#设计模式总结

创建型模式创建型模式就是用来创建对象的模式,抽象了实例化的过程。所有的创建型模式都有两个共同点。都将系统使用哪些具体类的信息封装起来隐藏了这些类实例时如何被创建和组织的单例模式解决的是对象实例化的个数问题,比如抽象工厂中的工厂,对象池等,除了Singleton之外,其他创建型模式解决的都是new所带来的耦合关系。单例模式指的是确保某一个类只有一个实例,并提供一个全局的访问点。实现要...

2018-09-28 14:22:59 461

原创 (49)C#设计原则

使用使用设计模式的根本原因是适应变化,提高代码复用率,是软件更具有可维护性和可扩展性。并且,在进行设计的时候,也需要遵循以下几个原则:单一职责原则、开放封闭原则、里氏替换原则、依赖导致原则、接口隔离原则、合成复用原则和迪米特法则。单一职责原则就一个类而言,应该只有一个引起它变化的原因。如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会影响到其他的职责,另外,把多个职责...

2018-09-26 16:00:49 375

原创 (48)C#设计模式—— 备忘录模式(Memento Pattern)

引言今天介绍的备忘录模式与命令模式有些相似,不同的是,命令模式保存的是发起人的具体命令(命令对应的是行为),而备忘录模式保存的是发起人的状态(状态对应的数据结构,如属性)。定义从字面意思就可以明白,备忘录模式就是对某个类的状态进行保存,等到需要回复的时候,可以从备忘录中进行恢复。生活中这样的例子经常看到,如备忘电话通讯录,备份数据库等。备忘录模式的具体定义:在不破坏封装的前提下,不会一个对...

2018-09-20 16:58:00 377

原创 (47)C#设计模式—— 访问者模式(Vistor Pattern)

定义访问者模式是封装一些施加于某种数据结构之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变。访问者模式适用于数据结构相对稳定的系统,它把数据结构和作用于数据结构之上的操作之间的耦合度降低,使得操作集合可以相对自由地改变。数据结构的每一个节点都可以接受一个访问者的调用,此节点访问者对象传入节点对象,而访问者对象则反过来执行节点对象的操作。这样的过长叫做“双重分流”。节点...

2018-09-20 16:01:04 242

原创 (46)C#设计模式—— 责任链模式

引言在现实生活中,有很多请求并不是一个人说了算,例如面试时的工资,地狱1万的可能技术经理就可以决定了,但是1万到1万5的公司可能技术经理就没这个权利批准,可能就需要请求技术总监的批准,所以面试的话,经常会有面试者说,你这个薪水我觉得你这技术可以拿这个薪水的,但是还需要技术总监的批准等话。这个例子引出了我们要介绍的责任链模式。定义从生活中的例子可以看出,某个请求需要几个人的审批,即使技术经理审...

2018-09-20 14:53:39 449

原创 (45)C#设计模式—— 策略者模式(Stragety Pattern)

定义在现实生活中,策略模式的例子也非常常见,例如,中国的所得税,分为企业所得税、外商投资企业或外商企业所得税和个人所得税,针对这3种所得税,针对每种,所计算的方式不同,个人所得税有个人所得税的计算方式,而企业所得税有其对应的计算方式。如果不采用策略模式来实现这样一个需求,可能我们会定义一个所得税类,该类有一个属性来标记所得税的类型,并且有一个计算税收的方法,在该方法体内需要对税收类型进行判断,通...

2018-09-19 15:23:19 198

原创 (44)C#设计模式——状态者模式(State Pattern)

介绍每个对象都有其对的状态,而每个状态有对应一些相应的行为,如果多个对象有多个状态,那么就会对应很多种行为。那么对这些状态的判断和根据状态完成的行为,就会导致多重条件语句,并且如果添加一种新的状态时,需要更改之前的代码。这样设计显然违背了开闭原则。状态模式正是用来解决这样的问题的。状态模式将每种状态对应的行为抽象出来成为单独新的对象,这样状态的变化不再依赖于对象内部的行为。定义状态模式:允许...

2018-09-19 14:52:18 214

原创 (43)C#设计模式——中介者模式(Mediator Pattern)

定义从生活中的例子可以看出,不论是QQ群还是QQ游戏,他们都是充当一个中间平台,QQ用户可以登录这个中间平台与其他QQ用户交流,如果没有这些中间平台,我们想与朋友聊天的话,可能就需要面对面才行了。电话,短信也是一样的,有了这个中间平台。每个用户都不用直接依赖于其他用户,只需要依赖这个平台就可以了,一切操作都由中间平台去分发。中介者模式,定义了一个中介对象来封装一系列对象之间的交互关系。中介...

2018-09-14 17:19:30 395

原创 (42)C#设计模式——观察者模式(Observer Pattern)

定义从生活中的例子可以看出,只要对订阅号关注的客户端,如果订阅号有什么更新,就会直接推送给订阅了的客户端。从中,我们可以理解观察者模式的定义。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听一个主题对象,这个主题对象在状态发生改变时,会通知所有观察者对象,使它们能够自动更新自己的行为。结构从上面观察者模式的定义和生活中的例子,我们知道了观察者模式中首先会存在两个对象,...

2018-09-14 16:43:17 259

原创 (41)C#设计模式——迭代器模式(Iterator Pattern)

介绍迭代器是针对集合对象而产生的,对于 集合对象而言,必然涉及到集合元素的添加、删除等操作,同时肯定也支持遍历集合元素的操作,我们可以把遍历操作也放在集合对象中,但这样的话,集合对象就承担太多的责任了,面向对象中有一条设计原则是单一职责原则,所以我们要尽可能的分离这些职责,用不同的类去承担不同的责任。迭代器模式就是来承担遍历集合元素的职责。定义迭代器模式提供了一种方法顺序访问一个聚合对...

2018-09-14 14:34:48 653

原创 (40)C#设计模式——命令模式(Command Pattern)

定义命令模式属于对象的行为模式。命令模式是把一个操作或者行为抽象到一个对象中,通过命令的抽象化使发出命令的责任和执行命令的责任分离开。命令模式的实现可以提供命令的撤销和回复功能结构既然命令模式是把发出命令的责任和执行命令的责任分隔开,那么中间就必须有某个对象来帮助发出命令者来传达命令,使得执行命令的接收者可以收到命令并执行命令。例如,开学了,院领导说计算机学院要进行军训,计算机学院的学...

2018-09-11 15:26:46 809 1

原创 (38)C#设计模式——代理模式(Proxy Pattern)

引言在软件开发过程中,有些对象有时候会由于网络或其他障碍,以至于不能够或者不能直接访问到这些对象,如果直接访问对象给系统带来不必要的复杂性,这时候可以在客户端和目标对象之间增加一层中间层,让代理对象代替目标对象,然后客户端只需要访问代理对象,由代理对象去帮我们请求目标对象并返回结果给客户端,这就是代理模式的实现思路。详细介绍代理模式按照使用目的可以分为以下几种:远程(Remote)...

2018-09-11 14:30:48 242

原创 (37)C#设计模式——享元模式(Flyweight Pattern)

引言在软件开发过程中,如果我们要重复使用某个对象的时候,重复使用new创建这个对象的话,这样我们在内存就要多次地去申请内存空间,这样可能会出现内存使用越来越多的情况,这种问题是非常严重的,使用享元模式可以结局这个问题。详细介绍上面说了,享元模式可以解决重复使用对象导致内存使用越来越多的问题,先分析一下如何去解决。上面的问题就是重复创建统一个对象,如果我们去解决这个问题肯定会这样想:既然...

2018-09-11 11:12:56 285

原创 (36)C#设计模式—— 外观模式(Facade Pattern)

引言在软件开发过程中,客户端经常会与复杂系统的内部子系统进行耦合,从而导致客户端程序跟着子系统的变化而变化,然而为了将复杂系统的内部子系统与客户端之间的以来解耦,从而就有了外观模式。详细介绍定义:外观模式提供一个统一的接口,用来访问子系统中的一群接口。外观模式定义了一个高层接口,让子系统容易试用。使用外观模式时,我们创建了一个统一的类,用来包装子系统中一个或多个复杂的类,客户端可以直接...

2018-09-10 16:47:03 171

原创 (35)C#设计模式—— 组合模式(Composite Pattern)

引言在软件开发过程中,我们经常会遇到处理简单对象和复合对象的情况,例如对操作系统中目录处理就是这样的一个例子,因为目录可以包括单独的文件,也可以包括文件夹,文件夹是由文件组成的,由于简单对象和复合对象在功能上的区别,导致在操作过程中必须区分简单对象和复合对象,这样就会导致客户调用带来不必要的麻烦。然而作为客户,希望能够始终一致地对待简单对象和复合对象。这样就可以采用组合模式组合模式详细介绍...

2018-09-03 15:28:12 173

原创 (34)C#设计模式——装饰者模式(Decorator Pattern)

引言在软件开发中,我们经常想要对一类对象添加不同的功能,例如要给手机添加贴膜、挂件、外壳等。如果此时使用继承来实现的话,我们就需要定义无数的类,这样会导致“子类爆炸”的问题。为了解决这个问题,可以使用装饰者模式来动态地给一个对象添加额外的职责。装饰者模式的详细介绍定义装饰者模式以对客户透明的方式动态地给一个对象附加上更多的职责,装饰者模式相比生成子类可以更灵活地增加功能。具体实...

2018-08-31 16:05:03 336

原创 (33)C#设计模式—— 桥接模式(Bridge Pattern)

引言用一个电视遥控器的例子来引出桥接模式解决的问题。我们每个牌子的电视机都有一个遥控器,此时我们能想到的一个设计是——把遥控器作为一个抽象类,抽象类中提供遥控器的所有实现,其他具体电视品牌的遥控器都继承这个抽象类。这样的实现使得每部不同型号的电视机都有自己的遥控器实现。这样的设计对于电视机的改变可以很好的应对,只需要添加一个派生类就好,但随着时间的推移,用户需要改变遥控器的功能,此时就需要修改...

2018-08-31 15:23:16 253

原创 (32)C#设计模式——适配器模式(Adapter Pattern)

引言在实际的开发过程中,由于应用环境的变化,我们需要的实现在新环境中没有现存对象可以满足,但是其他环境却存在这样现存的对象。如何在新环境中调用“现存的对象”呢?采用适配器模式可以解决。适配器模式使得新环境中不需要去重复实现已经存在了的实现,而很好的把现有的对象(指原来环境中的现有对象)加入到新环境中来使用。详细介绍定义:把一个类的接口变换成客户端所期待的另一种接口,从而使得原本接口不匹...

2018-08-30 17:10:29 1778

原创 (31)C#设计模式——原型模式(Prototype Parrern)

引言在软件系统中,当创建一个类的实例的过程很昂贵或很复杂,并且我们需要创建多个这样类的实例时,如果我们使用new操作符去创建这样的类实例,这未免会增加创建类的复杂度和耗费更多的内存空间,因为这样在内存中分配多个一样的类实例对象。如果采用工厂模式来封装类创建这样的系统的话,随着产品类的不断增加,导致子类的数量不断增多,反而增加了系统复杂程度,所以使用工程模式来封装类创建过程并不合适,可以使用原型...

2018-08-28 17:09:55 663

原创 (30)C#设计模式——建造者模式(Builder Pattern)

引言在软件系统中,有时需要创建一个复杂对象,并且这个复杂对象由其各部分子对象通过一定的步骤聚合而成。例如一个采购系统中,如果需要采购员去采购一批电脑,在这个实际需求中,电脑就是一个复杂的对象,它是由CPU、主板、硬盘、显卡、机箱等组装而成的,如果此时让采购员一台一台电脑去组装的话真是要累死他了。这里就可以用建造者模式来解决这个问题。我们可以把电脑的各个组件的组装过过场封装到一个建造者对象里,此...

2018-08-28 16:08:20 283

原创 (29)C#设计模式——模板方法

当我们去银行存钱的时候,银行会给你一张存款单,这张存款单就是一个模板,把一些公共的内容提取出来,留下部分内容让用户来填写。在软件系统中,将多个类的共有内容提取到一个模板中的思想就是模板方法模式的思想。模板方法模式就是基于代码复用技术,在模板方法模式中,可以将相同的代码放在父类中,而将不同的方法放在不同的子类中。在模板方法模式中,需要准备一个抽象类,将部分逻辑以具体方法以及具体构造函数形式实...

2018-08-28 14:42:36 269

原创 (28)C#设计模式——抽象工厂

概述抽象工厂模式的意图是为创建一组相关或相互依赖对象提供了一个接口,而且不需指定它们的具体类。抽象工厂可以向客户提供一个接口,使客户可以在不必指定产品具体类型的情况下,创建多个产品家族中的对象,它强调“系列对象”的变化。抽象工厂在开发中使用的频率很高。角色与结构抽象工厂:声明一个创建具体产品对象的操作接口(实际上是创建一个具体工厂的借口)具体工厂:实现创建具体产品对象的操作...

2018-08-28 14:16:47 257

原创 (27)C#设计模式——工厂方法

概述工厂方法模式是类的创建模式,其用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。工厂方法是简单工厂进一步的抽象和推广。由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。在工厂方法模式中,核心的工厂类不在负责所有产品的创建,而是将具体创建工作交给子类来完成。这个核心类仅仅负责人给吃具体工厂必须实现的接口,而不接触哪一个产品类被实例化这种细节。...

2018-08-28 13:42:25 330 2

原创 (26)C#设计模式——简单工厂

定义简单工厂模式:定义一个Factoryl类,可以根据参数的不同返回不同类的实例,被创建的实例通常都有共同的父类。又称为静态工厂模式,Factory类为静态类或包含静态方法。实质上是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类的实例。参与者Product:抽象产品类,将具体产品类公共的代码进行抽象和提取后封装在一个抽象产品类中。ConcreteProduct:具体产品类...

2018-08-25 15:49:51 385

原创 (25)C#设计模式——单例模式

什么是单例模式?从“单例”的字面意思上理解为:一个类只有一个实例。所以单例模式也就是保证一个类只有一个实例的一种实现方法。官方给出的定义:确保一个类只有一个实例,并提供一个全局访问点。单例模式的实现思路单例模式的实现代码很简单,也很容易看懂,但每次使用都会想为什们前人会这样实现单例模式呢?他们如何思考的呢?我们从单例模式的概念入手,可以把概念分为两部分:(1)确保一个类只有一个实例...

2018-08-25 14:25:20 379

原创 (24)C#异常处理——try-catch-finally的用法

 什么是异常?异常是指在程序运行过程中,发生错误会导致程序退出,这种错误,就叫做异常。处理这种错误,叫异常处理。异常处理如何操作?C# 异常处理是建立在四个关键字之上的:try、catch、finally和throw。try:一个try块标识了一个将被激活的特定的异常的代码块。后跟一个后多个catch块。简单的说就是可能会出现错误的代码块要放在try中。 catch:程序通过异常...

2018-08-24 17:05:03 2539 1

原创 (23) C# 基础—— 接口、抽象方法、抽象类和虚方法

今天讨论的接口、抽象类、抽象方法和虚方法都是以多为为基础的。什么是多态?同一种操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。举一个形象的例子,在我们听音乐会的时候,当指挥发出开始的信号,不同的乐器收到相同的信号,但是他们产生不同的行为:钢琴发出的是钢琴的声音,小号发出的是小号的声响。或者,如果把每个动物当成一个对象,那么他们都有一个方法叫做吃,但是他们却产生不同的行...

2018-08-24 15:30:45 503

原创 (22)C# 基础—— 面向对象之多态

多态概述什么是多态?同一种操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。举一个形象的例子,在我们听音乐会的时候,当指挥发出开始的信号,不同的乐器收到相同的信号,但是他们产生不同的行为:钢琴发出的是钢琴的声音,小号发出的是小号的声响。或者,如果把每个动物当成一个对象,那么他们都有一个方法叫做吃,但是他们却产生不同的行为,猫吃鱼,狗吃骨头。多态的实现C#中,类的...

2018-08-23 15:54:59 221

原创 (21)C# 基础—— 面向对象之继承

继承概述继承是面向对象编程最重要的特性之一。任何类都可以从另外一个类继承,也就是说,这个类拥有它继承的类的所有成员。在面向对象编程中,被继承的类被称为父类或者基类,这个类被称为子类或者派生类。C#中提供了类的继承机制,单只支持单继承,不支持多继承,即在C#中一次值允许继承一个类,不能同时继承多个类。继承一个类时,类成员的可访问性很重要。派生类不能访问基类的私有成员,但是可以访问公共成员。所...

2018-08-23 15:41:20 255

原创 (19)C# 基础—— 关键字大全

.NET C# Web开发学习之路(19)—— 关键字大全值类型关键字 关键字 说明 关键字 说明 enum 用于声明枚举 struct 用于声明结构 char 声明System.Char结构的字符,表示Unicode字符 decimal 128位浮点类型,适合于财务和货币计算 float 32位浮点值的简单类型 ...

2018-08-23 14:37:29 1112 2

原创 (20)C# 基础 —— 面向对象之封装

.NET C# Web开发学习之路(19)—— 面向对象之封装封装概述面向对象编程中,大多数是以类作为数据封装的基本单位。类将数据和操作数据的方法结合成一个单位。设计类时,不是直接存取类中的数据,而是希望通过方法来存取数据,这样就可以达到封装数据的目的,方便以后的维护升级,也可以在操作数据时多一层判断。此外,封装还可以解决数据存取的权限问题。可以使用封装将数据隐藏起来,形成一个封闭...

2018-08-23 14:11:13 270

原创 (18)C# 基础 —— 枚举类型(enum)

.NET C# Web开发学习之路(17)—— 枚举类型(enum)枚举类型(也称为枚举)提供了一种有效的方式来定义可能分配给变量的一组已命名整数常量。 例如,假设你需要定义一个变量,其值表示一周内的某一天。 该变量只会存储七个有意义的值。 若要定义这些值,可以使用枚举类型,该类型是使用 enum 关键字声明的。 enum Day { Sunday, Monday, Tuesday,...

2018-08-22 16:17:02 1094

原创 (17)C# 基础 —— 类(Class)

.NET C# Web开发学习之路(13)—— 类(Class)文章目录什么是类类修饰符构造函数析构函数什么是类?类是一种数据结构,可以包含数据成员(常量和域)、函数成员(方法、属性、事件、索引器、运算符、构造函数和析构函数)和嵌套类型等。类是对象在面向对象编程语言中的反映,是相同对象的集合。类描述了一系列在概念上有相同含义的对象,并为这些对对象统一定义了编程语言上的属相...

2018-08-22 14:54:51 3001

原创 (16)C# 基础 —— 结构(struct)

.NET C# Web开发学习之路(16)—— 结构(struct)文章目录结构概述结构的定义结构的使用结构概述所谓结构就是指由几个数据组成的数据结构,它与类共享几乎所有相同的语法,但比类受到的限制更多。结构是一种值类型,通常用来封装一组相关的变量。结构中可以包括构造函数、常量、字段、方法、属性、运算符、事件和嵌套类型等,但如果要同时包括上述几种成员,应该考虑使用类。...

2018-08-22 14:51:58 630

原创 (15)C# 基础 —— 方法

.NET C# Web开发学习之路(15)—— 方法文章目录方法概述方法修饰符方法声明方法分类重载方法方法概述方法是一种用于实现可以由对象或类执行的计算或操作的成员。类的方法主要是和类相关联的动作,它是类的外部界面,对于那些私有字段来说,外部界面实现对它们的操作一般只能通过方法来实现。方法是包含一些列语句的代码块,在C#中每个执行命令都是在方法的上下文中完成的。方法...

2018-08-22 14:29:50 224

原创 (14)C# 基础—— 字段和属性

.NET C# Web开发学习之路(13)—— 字段和属性字段字段是一种数据成员,其中容纳了一个值类型或者一个引用类型的引用。一般在类的内部做数据交互使用。字段就好比我们的个人所有财产,仅供个人使用,所以一般是private修饰。属性属性是一种用于访问对象或类的特性的成员。属性具有访问器,这些访问器指定它们在的值被读写时需要执行的语句,因此属性提供了一种机制,即把读取和写入...

2018-08-21 17:43:05 467

原创 (13)C# 基础—— 面向对象

.NET C# Web开发学习之路(13)—— 面向对象面向对象编程(OOP)是开发应用程序的一种新方法、新思想。过去面向过程编程常常回到石所有代码都包含在几个模块中,是程序难以阅读和维护,对软件做一些修改时常常牵一动百,是以后的开发和维护难以为继。而OOP技术使用许多代码模块,没个模块都只提供特定的功能,它们是彼此独立的,这样就提高了代码的重用率,更加有利于软件的开发、维护和升级。什么是...

2018-08-21 15:41:06 315

原创 (12)C# 基础—— Hashtable与Dictionary的区别

.NET C# Web开发学习之路(12)—— Hashtable与Dictionary的区别Dictionary在使用中是顺序存储的,而Hashtable由于使用的是哈希算法进行数据存储,是无序的。Dictionary的key和value是泛型存储,Hashtable的key和value都是objectDictionary是泛型存储,不需要进行类型转换,Hashtable由于使用ob...

2018-08-21 13:00:38 229

原创 (11)C# 基础—— Dictionary 字典

.NET C# Web开发学习之路(11)—— Dictionary 字典Dictionary概述必须包含命名空间System.Collection.GenericDictionary里面的每一个元素都是一个键值对(由两个元组组成:键和值).键必须是唯一的,而值不需要唯一的.键和值都可以是任意类型(例如:string,int,自定义类型,等等)通过一个键读取一个值的事件是接近...

2018-08-20 17:23:53 3108

原创 (10)C# 基础—— Hashtable(哈希表)

.NET C# Web开发学习之路(十)—— Hashtable(哈希表)Hashtable概述Hashtable通常称为哈希表,用于表示键/值对的集合,这些键/值对根据键的哈希代码进行组织,其没个元素都是一个存储于DictionaryEntry对象中的键/值对。键不能为空引用,但值可以。Hashtable的构造函数有多种,这里介绍两种最常用的。1、使用默认的初始容量、默认加载...

2018-08-20 16:38:17 3833

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除