
设计模式
yoyoshaoye
这个作者很懒,什么都没留下…
展开
-
观察者模式:消息的发布与订阅
namespace YOObserver{ class Program { static void Main(string[] args) { ClassOver co = new ClassOver();//下课 Teacher teacher = new Teacher("李老师",原创 2012-01-08 12:33:53 · 1426 阅读 · 0 评论 -
单例模式:单线程和多线程并发情况下的对象创建
1.单实例控制namespace SingletonPattern{ class Singleton { private static Singleton instance; /// /// 创建一个同步调用锁对象 /// private static readonly obj原创 2012-01-14 03:03:11 · 4607 阅读 · 0 评论 -
迭代器模式:对象索引器
1.迭代类的封装namespace Data{ /*迭代器模式:仿照IEnumerator接口,实现一个简单的迭代器。*/ //迭代器接口 public interface IIterators { int currentIndexx { get; set; } object GetCurrentItem();原创 2012-01-14 03:08:05 · 770 阅读 · 0 评论 -
职责链模式
1.职责链namespace DutyChainPattern{ /// /// 职责链模式:就是一个将请求或命令进行转发的流程,类似工作流。 /// 并且,也非常类似状态模式,它们共同的特点就是将一个复杂的判 /// 断逻辑,转移到各个子类,然后在由子类进行简单判断 /// /// 状态模式与职责链模式的区别: /原创 2012-01-14 03:09:30 · 627 阅读 · 0 评论 -
命令模式
1.命令控制namespace CommandPattern{ /*命令模式:当有客户端发送了一系列的命令或请求,去要求某个对象实现什么操作, * 可使用命令模式,相当于多个命令发给一个对象。 * * 这一点和观察者模式非常的类似。观察者模式也是某个对象,发出消息,然后由中 * 间对象通知观察者然后去做什么,封装的是要执行操作的对原创 2012-01-14 03:10:54 · 382 阅读 · 0 评论 -
桥接模式
1.对象组合namespace BridgeConnectionPattern{ /*桥接模式:一句合成/聚合原则,优先使用类之间的不同组合,来实现各个类要 * 表现的功能,而不是使用继承。比如说:继承会延续父类的功能,然而,并不是 * 所有的子类都需要这样的功能,但是抽象出的东西在父类,导致子类又必须要 * 实现它,这样,父类就越来越庞大,子原创 2012-01-14 03:12:43 · 1694 阅读 · 0 评论 -
备忘录模式:暂存数据到以对象以便随后恢复数据
1.备忘录类namespace Data{ /// /// 备忘录模式:事实上我觉得这个东西没什么用,安照这种方式进行备份,会因为 /// 值类型与引用类型的不同导致数据丢失。要暂存一样数据,其实方式还能更简单 /// public class Memorandum { public string LastN原创 2012-01-12 20:47:55 · 569 阅读 · 0 评论 -
解释器模式
1.翻译器namespace CompilerPattern{ /// /// 解释器模式:编译器抽象类 /// 根据编译器的规则,将输入翻译之后输出 /// 每个规则代表为一个类,然而,当规则众多的时候,将会显得不好管理。 /// 但是,当接收一个输入后需要对应的输出编码输出时,比如说加密, /// 解释正则表达式等,就可以使原创 2012-01-16 20:27:05 · 781 阅读 · 0 评论 -
享元模式
1.说明:namespace FlyweightPattern{ /* * 享元模式:实际来看,享元模式其实是为了避免创建过多的数据对象。 * 比如此列:在象棋中只有红黑双方,红棋子只是红棋中的一颗,很多 * 红棋其实可以使用一个红棋对象表示即可,在外部只需公开该棋的状 * 态即可区分那个红棋,从而达到减少内存消耗的目的原创 2012-01-16 20:28:39 · 427 阅读 · 0 评论 -
中介者模式
1.中间代理类namespace IntermediaryPattern{ /// /// 中介者模式:中介者类唯一要干的事情就是给各个成员对象发出通知。 /// 因此,中介者事先就应该知道有哪些成员 /// /// 中介者模式和代理模式,观察者模式非常的像。但是其它两种模式在调用的时候, /// 并不需要事先设置那个类被代理原创 2012-01-16 20:29:55 · 445 阅读 · 0 评论 -
访问者模式
1.说明namespace VisitorsPattern{ /*访问者模式:有个操作状态,作用于某个对象结构中的各个元素, * 此模式可以在不改变各个类的情况下去实施操作 */ /// /// 用于获取对象状态 /// public abstract class Action { p原创 2012-01-16 20:33:01 · 475 阅读 · 0 评论 -
组合模式:输出树形结构
1.节点类namespace CombinationPattern{ /* 组合模式:当对象或系统之间出现部分与整体,或类似树状结构的 * 情况时,考虑组合模式。相对装饰模式来说,这两个有异曲同工 * 之妙,都强调对象间的组合,但是,装饰模式同时强调组合的顺 * 序,而组合模式则是随意组合与移除 */ public abs原创 2012-01-12 20:53:56 · 785 阅读 · 0 评论 -
适配器模式
1.适配器类namespace Data{ public abstract class OperateDB { public abstract string IndertDB(); public abstract string UpdateDB(); public abstract string DelDB();原创 2012-01-12 20:50:52 · 363 阅读 · 0 评论 -
状态模式:分离对象的状态到各个独立类中,以避免一个方法体包含过多的判断
1.状态类namespace StatePattern{ /*状态模式:一个方法的判断逻辑太长,就不容易修改。方法过长,其本质就是, * 就是本类在不同条件下的状态转移。状态模式,就是将这些判断分开到各个能 * 表示当前状态的独立类中*/ /// /// 控制状态转移 /// public abstract cl原创 2012-01-12 20:45:10 · 1406 阅读 · 0 评论 -
策略模式
1.功能类namespace Data{ /* * 策略模式和简单工厂模式相比,少了使用switch case 做判断,然后去实例化相应的 * 对象,比简单工厂模式更灵活。 它们代码的区别就在于此处使用了抽象类代替工厂类 */ /// /// 策略类 /// public abstract clas原创 2012-01-09 23:34:46 · 443 阅读 · 0 评论 -
简单工厂模式
1.功能类namespace Data{ /// /// 此操作代表对数据库的增,删,改操作的基类 /// public class OperateDB { public virtual string OperateData() { string result = null;原创 2012-01-09 23:21:56 · 498 阅读 · 0 评论 -
工厂方法模式
1.具体操作类namespace Data{ /// /// 此操作代表对数据库的增,删,改操作的基类 /// public class OperateDB { public virtual string OperateData() { string result = nul原创 2012-01-10 21:35:56 · 488 阅读 · 0 评论 -
装饰模式:类的组合调用
1.装饰类namespace Data{ /* 一般情况下,当一个基类写好之后,我们也许不愿意去改动,也不能改动,原因是 * 这样的在项目中用得比较久的基类,一旦改动,也许会影响其他功能模块,但是, * 又要在该类上面添加功能。使用继承,当在A阶段,写出继承类,用过一段时间,发 * 现又要添加新功能,于是又要从原始类或A阶段的类继承,周而复始,原创 2012-01-11 21:15:15 · 853 阅读 · 0 评论 -
代理模式
/* * 代理模式: * 代理类成为实际想调用对象的中间件,可以控制对实际调用对象的访问权限 * 可以维护实际对象的引用 */ 1.代理类namespace Data{ public interface IProxy { string I原创 2012-01-11 21:20:05 · 491 阅读 · 0 评论 -
原型模式:值类型和引用类型的深拷贝与浅拷贝
1.拷贝对象namespace Data{ /// /// 要被浅拷贝的对象 /// public abstract class Prototype { public string ID { get; set; } public string Name { get; set; } p原创 2012-01-11 21:33:46 · 794 阅读 · 0 评论 -
建造者模式
1.建造者类namespace Data{ /// /// 抽象出所有子类统一的操作,然后使用使用Director类去 /// 实例化要具体功能的类. /// /// 建造者模式:当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式时使用 /// public abstract class Builde原创 2012-01-11 21:43:56 · 401 阅读 · 0 评论 -
抽象工厂模式:简单工厂模式、工厂方法模式对比;在工厂方法模式中使用反射创建对象实例
1.App.config文件配置 2.调用 static void Main(string[] args) { /*注意此处,和工厂方法一样,当需要使用哪个操作类时,就实例化对应 * 操作类的工厂类。 * 更灵活的方式是将创建 Opera原创 2012-01-11 21:51:14 · 880 阅读 · 0 评论 -
外观模式
1.外观模式类namespace Data{ /*外观模式:为外界调用提供一个统一的接口,把其他类中需要用到的方法提取 * 出来,由外观类进行调用。然后在调用段实例化外观类,以间接调用需要的 * 方法。这种方式和代理模式有异曲同工之妙。然而,根据迪米特法则,代理 * 模式应该尽可能的为单个对象进行代理。而外观模式更像是从众多类中提取原创 2012-01-11 21:54:12 · 513 阅读 · 0 评论 -
模板模式
1.模板类namespace Data{ /* 模板模式:其实就是抽象出各个具体操作类的公共操作方法,在子类重新 * 实现,然后使用子类去实例化父类。这个模板类其实可以使用接口替换。事 * 实上接口才是专门用来定义操作规范。当然,当有些公共方法,各个子类 * 均有一致需求,此时就不应使用接口,使用抽象类 */ public abst原创 2012-01-11 21:58:52 · 345 阅读 · 0 评论 -
23种设计模式对比与总结
设计模式总结: 前言:个人觉得设计模式就是各个对象在不同的时机、不同的调用方被创建,组合结构和封装的侧重点有些不同,从而形成了各个模式的概念。 1. 简单工厂模式通过在工厂类中进行判断,然后创建需要的功能类。优点:不必使用具体的功能类去创建该类的实例。缺点:新增一个功能类就需要在工厂类中增加一个判断。 2. 策略模式假设一个功能类是一个策略,原创 2012-02-12 10:53:33 · 13713 阅读 · 2 评论