学习的点点滴滴

Email : 107311278@qq.com
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

文章分类 -  设计模式系列

通过简单易懂的生活中的小例子以及自己在研发项目中遇到的具体情况使用设计模式去解决问题。从而降低程序耦合,以繁化简。 创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。 结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。 行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。
摘要:说明:在软件构建过程中,集合对象内部结构常常变化各异。但对于这些集合对象,我们希望在不暴露其内部结构的同时, 可以让外部客户代码透明地访问其中包含的元素;同时这种“透明遍历”也为“同一种算法在多种集合对象上进行操作” 提供了可能。使用面向对象技术将这种遍历机制抽象为“迭代器对象”为“应对变化中的集合对象”提供了一种优雅的方式 这种设计模式已经内化为C#语言的一种元素了,就是Foreach关键字.顺便吐槽一下,高级语言封装的太狠,很多东西许多 程序员都不了解本质就把功能实现了.结果作开发了几年,发现自己技术提高不上去了,一些必要的知识我们还是需要关注.类图: 代码: public ... 阅读全文

posted @ 2014-01-17 12:07 v薛定谔的猫v 阅读(126) 评论(0) 推荐(0)

摘要:说明:目标类克隆原型中的数据,然后加以改造利用构造自己可以利用的数据。目标类通过克隆一个或多个原型类来构造, 然后再修改或者是填充克隆出来的类的细节以使得其行为符合预先期望。 原型模式一般设计对父类数据的克隆问题。类图:代码: public class BaseModel{ public virtual int ID { get; set; } public virtual string Name { get; set; } pu... 阅读全文

posted @ 2014-01-16 23:28 v薛定谔的猫v 阅读(103) 评论(0) 推荐(0)

摘要:说明:将共用部分抽成一个接口或者抽象方法. 比如我们操作数据库 增加 修改 删除定义一个抽象类。类图:代码: public abstract class Database { public abstract List Select(int id); public abstract int Add(T t); public abstract bool Update(T t); public abstract bool Delete(int id); }public class ModelADAL : Dat... 阅读全文

posted @ 2014-01-16 22:41 v薛定谔的猫v 阅读(91) 评论(0) 推荐(0)

摘要:说明:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。类图:代码:/*使用策略模式 对发送邮件不同角色的人进行不同内容格式设置*/ /// /// 定义一个策略接口 /// public abstract class Strategy { /// /// 发送邮件格式方法 /// /// 内容 public abstract void SendEmailFormat(string Content); /// /// 发送短信格式方法 /// /// 短信内容 public abstract void Send... 阅读全文

posted @ 2014-01-16 15:21 v薛定谔的猫v 阅读(106) 评论(0) 推荐(0)

摘要:说明:观察者模式是软件设计的一种模式,也叫做发布/订阅模式。日常生活中基本上都有用到它。比如使用MSN当你的一个好友上线时,你就会收到上线通知;开心网当某个人转帖后,他的好友就都可以收到这个转帖,等等。也就是说一个目标管理所有依赖于它的观察者对象,当它本身状态发生变化时主动发出通知。类图:代码: /*业务需求:在审批流程的时候客户提交审批单或者审批按钮会发送同时邮件和短信*/ /*此业务需求可以利用观察者设计模式构建*/ public delegate bool EventObserverHandler(TEventArgs e); /// /// 注册事件源 ///... 阅读全文

posted @ 2014-01-15 01:02 v薛定谔的猫v 阅读(204) 评论(0) 推荐(0)

摘要:场景说明: 外观模式(Facade)的目的是提供一个接口,通过这个接口可以使一个子系统更容易使用。子系统可能有很多接口或者访问类,使用外观模式抽象出来共有的对其做一个组合封装。类图:代码:namespaceFacade{ /**//// ///子系统一,该子系统仅含有一个类 /// publicclassDrawLine { privateint_point; /**//// ///构造函数 /// ///画线的数量 publicDrawLine(intpoint) { this._point=point; } /**//// ///... 阅读全文

posted @ 2014-01-11 19:35 v薛定谔的猫v 阅读(95) 评论(0) 推荐(0)

摘要:意图:把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作.类图:说明: Adaptee类没有Request 方法,而客户期待这个方法。为了使客户能够使用 Adtapee类,提供一个中间环节,即类 Adapter类,Adapter类实现了 Target 接口,并继承 自 Adaptee,Adapter类的 Request 方法重新封装了 Adaptee的 SpecificRequest 方法, 实现了适配的目的。 因为 Adapter与 Adaptee是继承的关系,所以这决定了这个适配器模式是类的代码: using System... 阅读全文

posted @ 2014-01-11 17:42 v薛定谔的猫v 阅读(95) 评论(0) 推荐(0)

摘要:概念描述:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。类图:C#代码:interface IProduct { void productMethod(); } class Product : IProduct { public void productMethod() { Console.WriteLine("产品"); } } interface IFactory { IProdu... 阅读全文

posted @ 2013-02-20 11:25 v薛定谔的猫v 阅读(126) 评论(0) 推荐(0)

摘要:概念描述:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。在抽象工厂模式中,有一个产品族的概念:所谓的产品族,是指位于不同产品等级结构中功能相关联的产品组成的家族。类图:C#代码实现interface IProduct1 { void show(); } interface IProduct2 { void show(); } class Product1 : IProduct1 { public void show() { Co... 阅读全文

posted @ 2013-02-20 11:06 v薛定谔的猫v 阅读(107) 评论(0) 推荐(0)

摘要:概念描述: Singleton 模式要求一个类只有一个实例,提供了一个全局的访问.这个设计模式是比较简单的设计模式。类图: C#代码实现:单线程使用:publicclassSingleton{privatestaticSingleton_instance=null;privateSingleton(){}publicstaticSingleton getInstance(){if(_instance==null){_instance=newSingleton();}return_instance;}}多线程:publicclassSingleton{privatevolatilestati.. 阅读全文

posted @ 2013-02-05 11:49 v薛定谔的猫v 阅读(101) 评论(0) 推荐(0)