设计模式 简单工厂(simple factory pattern)
2012-03-26 18:00
836 查看
所有的创建模式都涉及到创建对象示例方式。这一点很重要,因为程序不应该依赖于对象如何创建和如何安排 。当然,使用new运算符是C#创建一个对象实力最简单的方法然而,这实际上相当于硬编码他和程序中如何创建对象管理有关。多数情况下,创建对象的本意随着程序的需求而不同,将创建一个抽象成一个专门的“创造器”类、,会使程序更加灵活、更通用工厂模式(Factory Method Pattern) 提供了一个简单的决策类,他根据提供的数据反回一个抽象基类的多个子类中的一个。
抽象工厂模式(Abstract Factory Pattern)提供了一个创建并返回一系列相关对象的接口。
单例模式(Singleton Pattern)是指某个类只能有一个实例。它提供一个访问该实例的全局访问点。
生成器模式(Builder Pattern)将一个复杂的对象的构建与他的表示分开,这样就能根据程序的需要创建不同的表现形式。
原型模式(Prototype Pattern)是先实例化一个类,然后拷贝或克隆该类来创建新的实例,可以用共有方法进一步修改这个实例
简单工厂
简单共产模式根据提供给他的数据,返回几个可能类中的一个实例,通常他返回的类都有一个共同的父类和共同的方法,但每个方法执行的任务不同,
而且根据不同的数据进行了优化,简单共产模式实际上不属于23GoF模式。
为了理解简单共产模式,我们来看下图。在该图中,X是一个基类,XY类和XZ类是他派生出来的、XFactory类根据给出的参数决定返回哪个一个子类 。
在右边定义了一个getClass方法,传递给他某个值如(abc),然后放回类X的某个实例,返回哪一个类的实例与程序员无关,
因为这些类有同样的方法,只是实现不同。返回那一个类的实力完全取决于工厂,工厂功能可能很复杂,但通常都很简单
![](http://pic002.cnblogs.com/images/2012/359991/2012032617505297.png)
下来我们看个例子
假设我们有一个窗体,窗体上边一个输入框只允许输入名字姓和名用","来分割是姓和名
首先构建一个基类
Namer
派生两个子类,接下来编写两个简单的派生类,他们实现了接口,在构造函数中将名字分成两个部分。
在firstFirst类中。做了一个简单的假设:最后一耳光空格前面所有的部分都属于姓"firstname"
在lastfirst、类中,用逗号给lastname划分界限。当空格逗号不存在是,两个类都提供了错误处理
工厂
使用工厂
简单工厂具有同样方法类 的实例,他可以是不同派生子类的实例,也可以是实际上毫无关系仅仅是共享了相同接口的类。不管是哪种形式,这些类实例中的方法必须是相同的
抽象工厂模式(Abstract Factory Pattern)提供了一个创建并返回一系列相关对象的接口。
单例模式(Singleton Pattern)是指某个类只能有一个实例。它提供一个访问该实例的全局访问点。
生成器模式(Builder Pattern)将一个复杂的对象的构建与他的表示分开,这样就能根据程序的需要创建不同的表现形式。
原型模式(Prototype Pattern)是先实例化一个类,然后拷贝或克隆该类来创建新的实例,可以用共有方法进一步修改这个实例
简单工厂
简单共产模式根据提供给他的数据,返回几个可能类中的一个实例,通常他返回的类都有一个共同的父类和共同的方法,但每个方法执行的任务不同,
而且根据不同的数据进行了优化,简单共产模式实际上不属于23GoF模式。
为了理解简单共产模式,我们来看下图。在该图中,X是一个基类,XY类和XZ类是他派生出来的、XFactory类根据给出的参数决定返回哪个一个子类 。
在右边定义了一个getClass方法,传递给他某个值如(abc),然后放回类X的某个实例,返回哪一个类的实例与程序员无关,
因为这些类有同样的方法,只是实现不同。返回那一个类的实力完全取决于工厂,工厂功能可能很复杂,但通常都很简单
![](http://pic002.cnblogs.com/images/2012/359991/2012032617505297.png)
下来我们看个例子
假设我们有一个窗体,窗体上边一个输入框只允许输入名字姓和名用","来分割是姓和名
首先构建一个基类
Namer
using System; namespace NameFactory { /// <summary> /// Summary description for Namer. /// </summary> //Base class for getting split names public class Namer { //parts stored here protected string frName, lName; //return first name public string getFrname(){ return frName; } //return last name public string getLname() { return lName; } } }
派生两个子类,接下来编写两个简单的派生类,他们实现了接口,在构造函数中将名字分成两个部分。
在firstFirst类中。做了一个简单的假设:最后一耳光空格前面所有的部分都属于姓"firstname"
using System; namespace NameFactory { /// <summary> /// Summary description for FirstFirst. /// </summary> public class FirstFirst : Namer { public FirstFirst(string name) { int i = name.IndexOf (" "); if(i > 0) { frName = name.Substring (0, i).Trim (); lName = name.Substring (i + 1).Trim (); } else { lName = name; frName = ""; } } } }
在lastfirst、类中,用逗号给lastname划分界限。当空格逗号不存在是,两个类都提供了错误处理
using System; namespace NameFactory { /// <summary> /// Summary description for LastFirst. /// </summary> public class LastFirst : Namer { public LastFirst(string name) { int i = name.IndexOf (","); if(i > 0) { lName = name.Substring (0, i); frName = name.Substring (i + 1).Trim (); } else { lName = name; frName = ""; } } } }
工厂
using System; namespace NameFactory { /// <summary> /// Summary description for NameFactory. /// </summary> public class NameFactory { public NameFactory() {} public Namer getName(string name) { int i = name.IndexOf (","); if(i > 0) return new LastFirst (name); else return new FirstFirst (name); } } }
使用工厂
Namer nm = nameFact.getName (txName.Text ); txFirst.Text = nm.getFrname (); txLast.Text = nm.getLname ();
简单工厂具有同样方法类 的实例,他可以是不同派生子类的实例,也可以是实际上毫无关系仅仅是共享了相同接口的类。不管是哪种形式,这些类实例中的方法必须是相同的
相关文章推荐
- 设计模式最简Demo:简单工厂模式[Simple Factory Pattern]
- 23种设计模式之-----简单工厂(静态工厂)模式(SimpleFactory Pattern)
- 设计模式简单工厂模式(SimpleFactoryPattern)
- 设计模式 简单工厂(simple factory pattern)转载
- 设计模式笔记4:简单工厂模式(Simple Factory Pattern)
- 简单工厂设计模式(Simple Factory Design Pattern)
- 设计模式学习笔记三:简单工厂(Simple Factory)
- 简单工厂模式-Simple Factory Pattern
- 设计模式学习笔记三:简单工厂(Simple Factory)
- 【设计模式】学习笔记4:简单工厂模式(Simple Factory)
- 设计模式之简单工厂(SimpleFactory)
- 设计模式之SimpleFactory(简单工厂)
- Java设计模式——简单工厂(Simple Factory)
- JAVA设计模式——简单工厂(Simple Factory)模式
- 设计模式(二)-简单工厂(Simple Factory)模式
- 设计模式:简单工厂(Simple Factory)
- 简单工厂模式 Simple Factory Pattern
- 抽象工厂设计模式(Abstract Factory Design Pattern)简单随笔
- 简单工厂模式(simple factory pattern)
- 简单工厂模式 Simple Factory Pattern