您的位置:首页 > 编程语言 > Java开发

Simple Factory Pattern 简单工厂模式——《深入浅出设计模式(C#/Java版)》

2009-09-25 10:39 603 查看
最近想学习设计模式,就找了一本书来看,书名:《深入浅出设计模式(C#/Java版)》 莫勇腾 编著。

 

以下内容就是从该书中摘抄下来的,实例都经过测试了,而且容易理解,特意积累下来。

 

Simple Factory Pattern(简单工厂模式):专门创建一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

 

C#实例1——电子付款系统

using System;
namespace EFT
{
//抽象电子付款类
abstract class EFT
{
public abstract void process();
}
//具体子类,虚拟检查
class VirtualCheck : EFT
{
public override void process()
{
Console.WriteLine("虚拟支票处理中");
}
}

//具体子类,万事达卡
class MasterCard : EFT
{
public override void process()
{
Console.WriteLine("万事达卡处理中");
}
}

//简单工厂类,创建的实例都有共同的父类EFT
class EFTFactory
{
public EFT createEFT(string type)
{
switch (type)
{
case "virtualcheck":
return new VirtualCheck();
case "mastercard":
return new MasterCard();
default:
return null;
}
}
}
//客户应用测试
class Client
{
[STAThread]
static void Main(string[] args)
{
EFT eft;
EFTFactory eftFactory = new EFTFactory();
eft = eftFactory.createEFT("virtualcheck");
eft.process();
eft = eftFactory.createEFT("mastercard");
eft.process();
Console.Read();//读取按键才结束程序,方便查看结果
}
}
}


输出:

  虚拟支票处理中

  万事达卡处理中

C#实例2——学校登录系统

using System;
namespace SchoolSystem
{
//Base Class 基类
public class SchoolUser
{
public string FName;
public string LName;
public string UserType;
public void Show()
{
Console.Write("First Name:" + FName + "/n");
Console.Write("Last Name:" + LName + "/n");
Console.Write("User Type:" + UserType + "/n");
}
}
//Derived Classes
public class SchoolPrincipal : SchoolUser
{
public SchoolPrincipal()
{
FName = "David";
LName = "Smith";
UserType = "Principal";
}
}

public class SchoolTeacher : SchoolUser
{
public SchoolTeacher()
{
FName = "Patrecia";
LName = "Terry";
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 Client
{
static void Main(string[] args)
{
SimpleFactory sf = new SimpleFactory();
SchoolUser su;
su = sf.GetSchoolUser("Principal", "Principal");
Console.Write("---------------校长登录---------------/n");
su.Show();
Console.Write("---------------教师登录---------------/n");
su = sf.GetSchoolUser("Teacher", "Teacher");
su.Show();
Console.Read();
}
}
}


输出:

---------------校长登录---------------

First Name:David

Last Name:Smith

User Type:Principal

---------------教师登录---------------

First Name:Patrecia

Last Name:Terry

User Type:Teacher

 

应用场景:
(1)       工厂类负责创建的对象比较少。
(2)       客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心。
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息