📄 cpatternlist.cs
字号:
/************************************************************************/
/* Design Pattern Program */
/* Copyright (C) 2006-2008 fujie(fishjam@163.com) */
/************************************************************************/
using System;
using System.Collections;
namespace DesignPattern
{
/// <summary>
///
/// </summary>
public class CPatternList : ArrayList
{
public CPatternList()
{
//
// TODO: 在此处添加构造函数逻辑
//
InitPatternList();
}
public Int32 InitPatternList()
{
//01.单件模式
CPatternInfo patternSingleton = new CPatternInfo(1,"单件模式","Singleton","Singleton");
patternSingleton.Purpose.Add("保证一个类仅有一个实例,并提供一个访问它的全局访问点。");
patternSingleton.Applicability.Add("1.当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。");
patternSingleton.Applicability.Add("2.当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。");
this.Add(patternSingleton);
//02.抽象工厂模式
CPatternInfo patternAbstractFactory = new CPatternInfo(2,"抽象工厂模式","AbstractFactory","AbstractFactory");
patternAbstractFactory.Purpose.Add("提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。");
patternAbstractFactory.Applicability.Add("1.一个系统要独立于它的产品的创建、组合和表示时。");
patternAbstractFactory.Applicability.Add("2.一个系统要由多个产品系列中的一个来配置时。");
patternAbstractFactory.Applicability.Add("3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。");
patternAbstractFactory.Applicability.Add("4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。");
this.Add(patternAbstractFactory);
//03.建造者模式
CPatternInfo patternBuilder = new CPatternInfo(3,"建造者模式","Builder","Builder");
patternBuilder.Purpose.Add("将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。");
patternBuilder.Applicability.Add("1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。");
patternBuilder.Applicability.Add("2.当构造过程必须允许被构造的对象有不同的表示时。");
this.Add(patternBuilder);
//04.工厂方法模式
CPatternInfo patternFactoryMethod = new CPatternInfo(4,"工厂方法模式","FactoryMethod","FactoryMethod");
patternFactoryMethod.Purpose.Add("定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。");
patternFactoryMethod.Applicability.Add("1.当一个类不知道它所必须创建的对象的类的时候。");
patternFactoryMethod.Applicability.Add("2.当一个类希望由它的子类来指定它所创建的对象的时候。");
patternFactoryMethod.Applicability.Add("3.当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。");
this.Add(patternFactoryMethod);
//05.原型模式
CPatternInfo patternPrototype = new CPatternInfo(5,"原型模式","Prototype","Prototype");
patternPrototype.Purpose.Add("用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。");
patternPrototype.Applicability.Add("1.或者当要实例化的类是在运行时刻指定时,例如,通过动态装载;");
patternPrototype.Applicability.Add("2.或者为了避免创建一个与产品类层次平行的工厂类层次时;");
patternPrototype.Applicability.Add("3.或者当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。");
patternPrototype.SampleUse.Add("CppUnit中在 Exception 的处理中,拷贝一个临时的异常对象并进行保存(TestCase::run(TestResult *result)");
this.Add(patternPrototype);
//06.适配器模式
CPatternInfo patternAdapter = new CPatternInfo(6,"适配器模式","Adapter","Adapter");
patternAdapter.Purpose.Add("将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。");
patternAdapter.Applicability.Add("1.你想使用一个已经存在的类,而它的接口不符合你的需求。");
patternAdapter.Applicability.Add("2.你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。");
patternAdapter.Applicability.Add("3.(仅适用于对象Adapter)你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。");
this.Add(patternAdapter);
//07.桥接模式
CPatternInfo patternBridge = new CPatternInfo(7,"桥接模式","Bridge","Bridge");
patternBridge.Purpose.Add("将抽象部分与它的实现部分分离,使它们都可以独立地变化。");
patternBridge.Applicability.Add("1.你不希望在抽象和它的实现部分之间有一个固定的绑定关系。例如这种情况可能是因为,在程序运行时刻实现部分应可以被选择或者切换。");
patternBridge.Applicability.Add("2.类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。这时Bridge模式使你可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充。");
patternBridge.Applicability.Add("3.对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译。");
patternBridge.Applicability.Add("4.有许多类要生成。这样一种类层次结构说明你必须将一个对象分解成两个部分。");
patternBridge.Applicability.Add("5.你想在多个对象间共享实现(可能使用引用计数),但同时要求客户并不知道这一点。");
this.Add(patternBridge);
//08.组合模式
CPatternInfo patternComposite = new CPatternInfo(8,"组合模式","Composite","Composite");
patternComposite.Purpose.Add("将对象组合成树形结构以表示“部分-整体”的层次结构。Composite 使得用户对单个对象和组合对象的使用具有一致性。");
patternComposite.Applicability.Add("1.你想表示对象的部分-整体层次结构。");
patternComposite.Applicability.Add("2.你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。");
patternComposite.SampleUse.Add("CppUnit 中的 TestCase(测试用例) 和 TestSuite(测试包) -- 两者都从 Test 继承,都实现纯虚函数 run");
this.Add(patternComposite);
//09.装饰模式
CPatternInfo patternDecorator = new CPatternInfo(9,"装饰模式","Decorator","Decorator");
patternDecorator.Purpose.Add("动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。");
patternDecorator.Applicability.Add("1.在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。");
patternDecorator.Applicability.Add("2.处理那些可以撤消的职责。");
patternDecorator.Applicability.Add("3.当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。");
this.Add(patternDecorator);
//10.外观模式
CPatternInfo patternFacade = new CPatternInfo(10,"外观模式","Facade","Facade");
patternFacade.Purpose.Add("为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。");
patternFacade.Applicability.Add("1.当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断演化而变得越来越复杂。"
+"大多数模式使用时都会产生更多更小的类。这使得子系统更具可重用性,也更容易对子系统进行定制,"
+"但这也给那些不需要定制子系统的用户带来一些使用上的困难。Facade可以提供一个简单的缺省视图,"
+"这一视图对大多数用户来说已经足够,而那些需要更多的可定制性的用户可以越过Facade层。");
patternFacade.Applicability.Add("2.客户程序与抽象类的实现部分之间存在着很大的依赖性。引入Facade 将这个子系统与客户以及其他的子系统分离,可以提高子系统的独立性和可移植性。");
patternFacade.Applicability.Add("3.当你需要构建一个层次结构的子系统时,使用Facade模式定义子系统中每层的入口点。如果子系统之间是相互依赖的,你可以让它们仅通过Facade 进行通讯,从而简化了它们之间的依赖关系。");
this.Add(patternFacade);
//11.享元模式
CPatternInfo patternFlyweight = new CPatternInfo(11,"享元模式","Flyweight","Flyweight");
patternFlyweight.Purpose.Add("运用共享技术有效地支持大量细粒度的对象。");
patternFlyweight.Applicability.Add("1.一个应用程序使用了大量的对象。");
patternFlyweight.Applicability.Add("2.完全由于使用大量的对象,造成很大的存储开销。");
patternFlyweight.Applicability.Add("3.对象的大多数状态都可变为外部状态。");
patternFlyweight.Applicability.Add("4.如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象。");
patternFlyweight.Applicability.Add("5.应用程序不依赖于对象标识。由于Flyweight对象可以被共享,对于概念上明显有别的对象,标识测试将返回真值。");
this.Add(patternFlyweight);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -