随笔分类 -  设计模式

摘要:状态模式——当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 状态模式在我看来是我学习到目前设计模式之中最有意思的一个设计模式了,它给我的感觉就是绝对的高内聚,在表面层进行调用的时候,完全不知道它是怎么改变了状态的,我们只是给一个属性赋了值而已,然后调用了同样的方法,它的状态就完全变了。 一般的开发中,要根据一个状态去动态的输出,是需要很多的if-else的判断的,每增加一个状态,我们就需要在这个判断的类中进行修改,这样完全违背了单一责任原则和开发封闭原则。有了状态模式,我们可以很好的对代码进行分离,使每个状态都有自己的特点。 状态模式最重要的一个类是一个叫S... 阅读全文
posted @ 2013-05-30 23:06 Kitten Zhang 阅读(163) 评论(0) 推荐(0)
摘要:单例模式——保证一个类仅有一个实例,并提供一个访问它的全局访问点 单例模式是为了解决全局只允许存在一个实例,防止出现多个实例扰乱程序的正常的运行,单例模式不是一个时刻都需要运用的模式,是情非得已下才使用的 它在多线程的条件下使用时必须要加锁才行,这样就造成了两种实现方式,分为“饿汉式”和“懒汉式”。 “饿汉式”单例的实现,饿汉式的实现方式在于静态初始化时就自己实例化了自己,不需要外部进行初始化,提前占用资源。、1.创建一个单例类,定义为sealed不可继承,并且在初始化的时候就自己创建了一个实例,外部调用时将这个实例返回回去。 1 /// <summary> 2 /// 定义这个类 阅读全文
posted @ 2013-05-29 23:16 Kitten Zhang 阅读(145) 评论(0) 推荐(0)
摘要:抽象工厂模式——提供一个创建一系列相关或依赖对象的接口,而无需指定它们的具体的类。 抽象工厂模式可以算设计模式中一个明星模式了,它完全实现了低耦合,配合反射一起应用的话,完全实现实现类之间无任何耦合,它可以改变一个应用的具体工厂,这非常容易实现,它只需要改变具体工厂即可使用不同的产品配置 同时,他让具体的创建实例过程与客户端分离,客户端是通过它们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户端中。1.User类,实体类,定义了姓名和ID两个属性 1 /// <summary> 2 /// 用户表 3 /// </summary> 4 publi 阅读全文
posted @ 2013-05-29 22:30 Kitten Zhang 阅读(146) 评论(0) 推荐(0)
摘要:观察者模式——定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生改变时,会通知所有观察者对象,使它们能够自动更新自己。 观察者模式正如以上定义所说的,为了解决一个对象的状态改变,同时去改变另外几个对象的状态的一个设计模式。当然,那些观察者必须保持一致。1.Subject类,抽象通知者类,定义并且实现了增加观察者,移除观察者,和通知观察者的方法。 1 /// <summary> 2 /// 抽象通知者 3 /// </summary> 4 public abstract class Subject 5 { 6 //定义一个观察者对象 阅读全文
posted @ 2013-05-26 22:02 Kitten Zhang 阅读(162) 评论(0) 推荐(0)
摘要:建造者模式——将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 建造者模式同样是为了解决对象创建的低耦合而设计的模式,不过它有一些不同,那就是在于创建一系列对象时有序的,不可缺少的。如果用了建造者模式,那么用户只需指定需要建造的类型就可以得到它们,而建造的过程和细节就不需要知道了。 怎样运用建造者模式,有以下几个步骤:1.Product类,既然是建造,那么必须有产品吧,这里定义了一个产品类,它有多个部件。 1 /// <summary> 2 /// 产品类 3 /// </summary> 4 public class Product 5 { 阅读全文
posted @ 2013-05-26 17:46 Kitten Zhang 阅读(151) 评论(0) 推荐(0)
摘要:外观模式——为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 外观模式是指当有很多的类,它们实现不同的功能,可能出现很多种的组合功能,需要在客户端不停的去实现,造成了客户端责任不单一,代码过多、重复、易变等问题,外观模式可以解决这一问题。1.SubSystem类,子系统,包含了很多的功能实现,要实现这些功能需要在客户端创建这些组合 1 /// <summary> 2 /// 子系统1 3 /// </summary> 4 public class SubSystemOne 5 { 6 public void Meth 阅读全文
posted @ 2013-05-26 16:24 Kitten Zhang 阅读(167) 评论(0) 推荐(0)
摘要:模板模式——定义一个操作中算法的骨架,而降一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构既可以重定义该算法的某些特定步骤。 模板模式时为了解决避免子类去重复一项操作而设计的一种模式,假如自己都有一个方法去现实一个操作,并且在子类创建对象时重复进行该操作,那么可以将该操作给父类,让父类去完成这些操作,统一输出。 它通过把不变行为搬移到超类,去除子类中的重复代码,提供了一个很好的代码复用平台,下面是具体的实现方式。1.Template类,模板类,定义了一些由子类去实现的抽象方法,并且让子类实现了该方法后再统一的模板方法里去执行 1 /// <summary> 2 /// 阅读全文
posted @ 2013-05-25 17:23 Kitten Zhang 阅读(165) 评论(0) 推荐(0)
摘要:原型模式——用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 原型模式其实就是对.NET中拷贝的一个应用模式,拷贝表面意思就是将对象拷贝一份,由于.NET中有引用类型和值类型两种类型,所以也分为浅拷贝和深拷贝这两种概念。 先说下浅拷贝吧,在.NET中,引用类型会在创建时内存空间给动态分配一个内存。典型的引用类型就是创建一个对象,这个对象就是引用类型。当我们先实例化一个对象时,内存空间开辟一个空间存放这个对象。当再创建一个同类型的对象时,把先前创建的对象赋值给后创建的,也就是没执行new的操作,这是新创建的对象不会新开辟一个内存空间,而是把新对象指向原来对象的内存空间。这... 阅读全文
posted @ 2013-05-25 16:07 Kitten Zhang 阅读(168) 评论(0) 推荐(0)
摘要:工厂模式——定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。 工厂模式和简单工厂模式同属于工厂类型的模式,都是以一个工厂生产对象为目标,降低耦合。要说区别,就是在创建产品对象的时候的方式不同。简单工厂模式工厂里面还是存在一些耦合的,当需要创建新的产品时,还是需要去修改这个工厂类的。而工厂模式由子类去创建产品,不需要改工厂,只需添加一个工厂,再一次的降低的耦合性。相应的,也带来了代码量的增加。 下面还是以计算器为例子,展示下工厂模式的应用。1.Operation类,于简单工厂无异,还是作为一个具体实现类的父类 1 /// <summary> 阅读全文
posted @ 2013-05-25 09:29 Kitten Zhang 阅读(148) 评论(0) 推荐(0)
摘要:代理模式——为其他对象提供一种代理以控制对这个对象的访问。 代理模式一个应用很广泛的模式,它是建立在对象和引用对象之间,当需要访问一个对象时,可能会因为一些特殊原因造成一些困难,这样就会用到代理模式。1.Subject类,这个是一个抽象接口,代理和对象的公共接口,这样任何要对对象进行访问的地方,就可以访问代理了。 1 /// <summary> 2 /// 公共接口 3 /// </summary> 4 public abstract class Subject 5 { 6 /// <summary> 7 /// 定义了一个抽象方法 8 /// </s 阅读全文
posted @ 2013-05-23 22:28 Kitten Zhang 阅读(134) 评论(0) 推荐(0)
摘要:装饰模式(Decorator)——动态的给一个对象添加一些额外的职责,就增加功能而言,装饰模式比生产子类更加灵活。 在日常开发中,经常会遇见一个对象有很多的功能,但是这些功能有时候是需要的,有的时候并不需要其他功能,只用到了这个对象中的一部分功能。这样,类的复杂度就比较高,违背了单一责任原则和开发-封闭原则。这时候就需要装饰模式。 装饰模式是为已有功能动态的添加更多功能的一种方式。当系统需要新功能时,是向旧的类中添加的代码通常作用就是给原有的类的核心职责添加一些行为。当使用装饰模式的时候,保持原有的类的核心责任不变,动态的给增加功能。这样,当执行特殊行为的时候,客户端代码就可以在运行中... 阅读全文
posted @ 2013-05-22 22:07 Kitten Zhang 阅读(202) 评论(0) 推荐(0)
摘要:不管何种设计模式,其实都会遵守一些设计原则,这些设计原则可以理解为面向对象的一些精髓,只有遵守这些设计原则,设计模式才会变得精彩! (1)单一职责原则——就一个类而言,应该仅有一个引起它变化的原因。 初步看来,单一职责的解释有点似懂非懂,类肯定会变化的,那什么是变化,又有什么可以使类发生变化呢。其实可以这么理解:如果一个类承担的责任过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当发生变化时,设计会遭受到意想不到的破坏。这么理解看来,单一职责原则其实就是鼓励一个类只完成它的专属责任,它不因该完成多个任务或者代替其他类... 阅读全文
posted @ 2013-05-21 21:52 Kitten Zhang 阅读(171) 评论(0) 推荐(0)
摘要:策略模式其实很想一个简单工厂模式的再封装,简单工厂模式,在工厂Factory中生产的是对象。而策略模式的上下文Context不仅创建了对象,而且直接调用了对象的计算方法,给我们返回的计算出的值。 工厂模式,客户端需要(开发人员)需要记住父类和工厂类两个对象,通过参数创建对象,而策略模式,只需要创建context类,传入参数,调用方法就可以实现计算,少了一个类型,可以使客户端更加简洁。 策略模式,它的本质就是用来封装算法,将本来由客户端承担的对象选择的职责,转到Context中,减少了客户端的压力。 使用策略模式,要注意,策略模式里面的算法都是完成的相同的工作,只是这些工作实现的算法不... 阅读全文
posted @ 2013-05-20 22:28 Kitten Zhang 阅读(153) 评论(0) 推荐(0)
摘要:简单工厂模式可以说重面向过程转向面向对象的一个比较典型的模式,这是一个基本实现了类的继承和多态的模型,并且最后可进行封装,简单工厂模式并不是很难,但是却很有用。下面是我理解的具体的内容和代码:1.创建Opretation操作类,这是一个父类,它不具体实现什么,可以说只是一个实体类。 1 /// <summary> 2 /// 这是一个父类,主要作用是获取参数值, 3 /// 定义一个抽象方法,给子类进行重写 4 /// </summary> 5 public class Operation 6 { 7 private double n... 阅读全文
posted @ 2013-05-19 22:18 Kitten Zhang 阅读(140) 评论(0) 推荐(0)