1.单例模式

概念:单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。

应用:
一些资源管理器常常设计成单例模式。
需要管理的软件内部资源也包括譬如负责记录网站来访人数的部件,记录软件系统内部事件、出错信息的部件,或是对系统的表现进行检查的部件等。这些部件都必须集中管理,不可政出多头。  
 这些资源管理器构件必须只有一个实例,这是其一;它们必须自行初始化,这是其二;允许整个系统访问自己这是其三。因此,它们都满足单例模式的条件,是单例模式的应用。

参考:i.简单实用

http://www.cnblogs.com/procoder/archive/2010/02/25/Singleton-NET.html

ii.深入详细

http://www.cnblogs.com/BoyXiao/archive/2010/05/07/1729376.html

2.观察者模式

概念:Observer:定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。

反正只要有消息源和消息处理两大类的应用环境都可以考虑使用Observer模式,Don't call us,we will call you.  消息源或者是管理模块就是we。

消息处理类是订阅者。

一个有趣的示例:
OBSERVER模式
想知道咱们公司最新MM情报吗?加入公司的MM情报邮件组就行了,tom负责搜集情报,他发现的新情报不用一个一个通知我们,直接发布给邮件组,我们作为订阅者

参考:

实用:http://www.cnblogs.com/procoder/archive/2009/03/20/1417516.html

3.门面模式

概念:Facade:为子系统中的一组接口提供一个一致的界面, F a c a d e模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

FACADE—我有一个专业的Nikon相机,我就喜欢自己手动调光圈、快门,这样照出来的照片才专业,但MM可不懂这些,教了半天也不会。幸好相机有Facade设计模式,把相机调整到自动档,只要对准目标按快门就行了,一切由相机自动调整,这样MM也可以用这个相机给我拍张照片了。

可参考:http://www.cnblogs.com/tianzhiliang/archive/2011/09/30/2196249.html

4.模板方法模式

概念:Template Method:定义一个操作中的算法的骨架(The "Template Method"),而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

可参考:http://www.cnblogs.com/chengxingliang/archive/2011/11/29/2256139.html

          http://terrylee.cnblogs.com/archive/2006/07/04/DesignPattern_TemplateMethod.html

        如果这个方法有默认的实现,则实现为virtual,否则为abstract;

        模板方法的一个重要特征是:在基类里定义,而且不能够被派生类更改。有时候它是私有方法(private method),但实际上它经常被声明为protected。它通过调用其它的基类方法(覆写过的)来工作,但它经常是作为初始化过程的一部分被调用的,这样就没必要让客户端程序员能够直接调用它了。

5.工厂方法模式

概念:定义一个用于创建对象的接口,让子类决定实例化哪一个类。

在引进新产品的情况下,我们并不需要去修改工厂类,而只是增加新的产品类和新的工厂类。

可以在配置文件中设置具体工厂类,然后在客户端通过反射构造相应的实例。

string strfactoryName = ConfigurationSettings.AppSettings["factoryName"];
LogFactory factory;
11 factory = (LogFactory)Assembly.Load("FactoryMethod").CreateInstance("FactoryMethod."+ strfactoryName);

  反射:通过放射,可以在运行时获得.NET中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等。还可以获得每个成员的名称、限定符和参数等。

反射实际上就是得到程序集中的属性和方法.
实现步骤:
1,导入using System.Reflection;
2,Assembly.Load("程序集")加载程序集,返回类型是一个Assembly
3,   foreach (Type type in assembly.GetTypes())
            {
                string t = type.Name;
            }
   得到程序集中所有类的名称
4,Type type = assembly.GetType("程序集.类名");获取当前类的类型
5,Activator.CreateInstance(type); 创建此类型实例
6,MethodInfo mInfo = type.GetMethod("方法名");获取当前方法
7,mInfo.Invoke(null,方法参数);

参考:http://www.cnblogs.com/chengxingliang/archive/2011/09/27/2189463.html

        http://terrylee.cnblogs.com/archive/2006/01/04/310716.html

6.抽象工厂模式
概念: 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

适用性  一个系统要由多个产品系列中的一个来配置时。   当你要强调一系列相关的产品对象的设计以便进行联合使用时。  

 
工厂方法模式:每个抽象产品派生多个具体产品类,每个抽象工厂类派生多个具体工厂类,每个具体工厂类负责一个具体产品的实例创建;
抽象工厂模式:每个抽象产品派生多个具体产品类,每个抽象工厂派生多个具体工厂类,每个具体工厂负责多个(一系列)具体产品的实例创建。

参考:http://terrylee.cnblogs.com/archive/2005/12/13/295965.html

         http://www.cnblogs.com/chengxingliang/archive/2011/09/28/2193906.html

7.简单工厂模式

  简单工厂其实不是一种模式,只是一种编辑习惯

 具体产品类继承自抽象产品类(提供公共接口),工厂类有一个工厂方法,根据传入的字符串参数做swith判断,返回相应的具体产品对象。

客户端:首先将工厂实例化,然后使用工厂创建产品赋值给抽象产品的引用,然后通过抽象产品的公共接口调用具体产品的方法以实现功能。

参考:http://www.cnblogs.com/chengxingliang/archive/2011/12/12/2283466.html

8.策略模式

Strategy:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法的变化可独立于使用它的客户。

策略模式:策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式把行为和环境分开。环境类负责维持和查询行为类,各种算法在具体的策略类中提供。由于算法和环境独立开来,算法的增减,修改都不会影响到环境和客户端。

场景角色根据传入的具体策略类对象,调用公共接口,实现具体算法。

参考:http://www.cnblogs.com/chengxingliang/archive/2011/09/26/2185509.html

9.命令模式

命令模式:命令模式把一个请求或者操作封装到一个对象中。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。

Command模式的根本目的在于将“行为请求者”与“行为实现者”解耦,在面向对象语言中,常见的实现手段是“将行为抽象为对象”。

应用场景:用户(调用者)开电脑时,面对电脑只有一个开关按钮(命令对象),这个开关按钮会让主板(接收者)通电,由主板去做启动电脑的操作。

 参考http://www.cnblogs.com/chengxingliang/archive/2011/10/20/2213429.html

10.适配器模式

 适配器(变压器)模式:把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口原因不匹配而无法一起工作的两个类能够一起工作。

 应用场景:在第三方类库中有一个源对象可以实现判断用户是否属于成人、是几个字的名字,但是需要的功能是显示用户信息,且不能更改第三方类库。

分析:现在的系统中需要的是显示用户信息的功能,在这里我们通过适配器模式调用第三方的对象,在目标对象中显示用户信息处理,并提供接口给客户端。

参考http://www.cnblogs.com/chengxingliang/archive/2011/09/15/2173195.html

11.装饰者模式

DECORATOR—Mary过完轮到Sarly过生日,还是不要叫她自己挑了,不然这个月伙食费肯定玩完,拿出我去年在华山顶上照的照片,在背面写上“最好的的礼物,就是爱你的Fita”,再到街上礼品店买了个像框(卖礼品的MM也很漂亮哦),再找隔壁搞美术设计的Mike设计了一个漂亮的盒子装起来……,我们都是Decorator,最终都在修饰我这个人呀,怎么样,看懂了吗?

  装饰模式:装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案,提供比继承更多的灵活性。动态给一个对象增加功能,这些功能可以再动态的撤消。增加由一些基本功能的排列组合而产生的非常大量的功能。

 http://www.cnblogs.com/chengxingliang/archive/2011/12/22/2291750.html

 

posted on 2012-01-08 11:43  Iven Joe  阅读(226)  评论(0编辑  收藏  举报