Simple Factory Pattern(简单工厂模式)
2009-12-03 17:29
423 查看
演示simple Factory Pattern
C#实例1---付款系统
简单工厂定义了创建对象的接口,创建对象是子类的实例化.在电子付款系统(Electronic Funds Transfer[EFT])中,会存在很多种电子交易方式,包括虚拟支票、信用卡、有线传送等。如果不应用简单工厂设计模式,代码捆绑在一起,有变动改起来就麻烦了
应用简单工厂设计模式,通过简单工厂类定义EFT的抽象类,该类定义处理方法,具体子类通过继承抽象类的方法来实现处理过程,这样,增加其他EFT就变得容易了,代码页更清晰了。类图如下:
代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleDesignPatterns
{
public class SchoolUser
{
public string FName;
public string LName;
public string UserType;
public void show()
{
Console.WriteLine("First Name: "+FName);
Console.WriteLine("Last Name: "+LName);
Console.WriteLine("User Type: "+UserType);
}
}
public class SchoolPrincipal:SchoolUser
{
public SchoolPrincipal()
{
this.FName="David";
this.LName = "Smith";
this.UserType = "Principal";
}
}
public class SchoolTeacher:SchoolUser
{
public SchoolTeacher()
{
this.FName = "Patrecia";
this.LName = "Terry";
this.UserType = "Teacher";
}
}
public class SimpleFactory
{
public SchoolUser GetSchoolUser(string user ,string password)
{
if (user == "Principal" && password == "Principal")
return new SchoolPrincipal();
if (user == "Teacher" && password == "Teacher")
return new SchoolTeacher();
return null;
}
}
class Program
{
static void Main(string[] args)
{
SimpleFactory sf = new SimpleFactory();
SchoolUser su;
su = sf.GetSchoolUser("Principal", "Principal");
Console.WriteLine("--------------------校长登陆------------------------");
su.show();
Console.WriteLine("--------------------教师登陆------------------------");
su = sf.GetSchoolUser("Teacher", "Teacher");
su.show();
Console.Read();
}
}
}
优势和缺陷
在简单工厂模式中,工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面中摆脱出来,仅仅需要负责“消费”对象就可以了,而不必管这些对象究竟是如何创建以及如何组织的。这样就明确区分了各自的职责和权力,有利于整个软件体系结构的优化。
不过,凡事有利就有弊,简单工长模式的缺点也正体现在其工厂类上。由于工厂类集中了所有的创建逻辑,很容易违反GRASPR的高内聚的责任分配原则。将全部创建逻辑都集中到一个工厂类中还有一个缺点,那就是当系统中的具体产品类不断增多时,可能会出现要求工厂类根据不同条件创建不同实例的要求。这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的扩展和维护也非常不利。
应用情景:
下列情况适用于应用简单工厂模式:
1、工厂类负责创建的对象比较少;
2、客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心;
由于简单工厂很容易违反GRASPR的高内聚责任分配原则,因此一般只在很简单的情况下使用。
C#实例1---付款系统
简单工厂定义了创建对象的接口,创建对象是子类的实例化.在电子付款系统(Electronic Funds Transfer[EFT])中,会存在很多种电子交易方式,包括虚拟支票、信用卡、有线传送等。如果不应用简单工厂设计模式,代码捆绑在一起,有变动改起来就麻烦了
应用简单工厂设计模式,通过简单工厂类定义EFT的抽象类,该类定义处理方法,具体子类通过继承抽象类的方法来实现处理过程,这样,增加其他EFT就变得容易了,代码页更清晰了。类图如下:
代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleDesignPatterns
{
public class SchoolUser
{
public string FName;
public string LName;
public string UserType;
public void show()
{
Console.WriteLine("First Name: "+FName);
Console.WriteLine("Last Name: "+LName);
Console.WriteLine("User Type: "+UserType);
}
}
public class SchoolPrincipal:SchoolUser
{
public SchoolPrincipal()
{
this.FName="David";
this.LName = "Smith";
this.UserType = "Principal";
}
}
public class SchoolTeacher:SchoolUser
{
public SchoolTeacher()
{
this.FName = "Patrecia";
this.LName = "Terry";
this.UserType = "Teacher";
}
}
public class SimpleFactory
{
public SchoolUser GetSchoolUser(string user ,string password)
{
if (user == "Principal" && password == "Principal")
return new SchoolPrincipal();
if (user == "Teacher" && password == "Teacher")
return new SchoolTeacher();
return null;
}
}
class Program
{
static void Main(string[] args)
{
SimpleFactory sf = new SimpleFactory();
SchoolUser su;
su = sf.GetSchoolUser("Principal", "Principal");
Console.WriteLine("--------------------校长登陆------------------------");
su.show();
Console.WriteLine("--------------------教师登陆------------------------");
su = sf.GetSchoolUser("Teacher", "Teacher");
su.show();
Console.Read();
}
}
}
优势和缺陷
在简单工厂模式中,工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面中摆脱出来,仅仅需要负责“消费”对象就可以了,而不必管这些对象究竟是如何创建以及如何组织的。这样就明确区分了各自的职责和权力,有利于整个软件体系结构的优化。
不过,凡事有利就有弊,简单工长模式的缺点也正体现在其工厂类上。由于工厂类集中了所有的创建逻辑,很容易违反GRASPR的高内聚的责任分配原则。将全部创建逻辑都集中到一个工厂类中还有一个缺点,那就是当系统中的具体产品类不断增多时,可能会出现要求工厂类根据不同条件创建不同实例的要求。这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的扩展和维护也非常不利。
应用情景:
下列情况适用于应用简单工厂模式:
1、工厂类负责创建的对象比较少;
2、客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心;
由于简单工厂很容易违反GRASPR的高内聚责任分配原则,因此一般只在很简单的情况下使用。
相关文章推荐
- 简单工厂模式 (Simple Factory Pattern) / 静态工厂方法(Static Factory Method)模式
- 简单工厂模式-Simple Factory Pattern 工厂三兄弟之简单工厂模式(二):简单工厂模式概述
- 简单工厂模式 Simple Factory Pattern
- 简单工厂模式(SimpleFactory Pattern)
- c++设计模式:简单工厂模式(Simple Factory Pattern)
- JAVA设计模式之 简单工厂模式【Simple Factory Pattern】
- Net设计模式实例之简单工厂模式(Simple Factory Pattern)
- C#设计模式之简单工厂模式(Simple Factory Pattern)
- 设计模式(二)简单工厂模式(Simple Factory Pattern)
- 简单工厂模式(simple factory pattern)
- 简单工厂模式(Simple Factory Pattern)
- 简单工厂模式(SimpleFactory Pattern)
- 设计模式学习总结-简单工厂模式(Simple Factory Pattern)
- 简单工厂模式(Simple Factory Pattern)
- 简单工厂模式-Simple Factory Pattern
- 简单工厂模式(Simple Factory Pattern)
- Java 简单工厂模式(Simple Factory Pattern)又叫静态工厂方法模式(Static FactoryMethod Pattern)
- 简单工厂模式(Simple Factory Pattern)
- 简单工厂模式(SimpleFactoryPattern)对比工厂方法模式(FactoryMethodPattern)分析
- 解读设计模式----简单工厂模式(SimpleFactory Pattern),你要什么我就给你什么