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

最近想学习设计模式,就找了一本书来看,书名:《深入浅出设计模式(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)       客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心。

 

你可能感兴趣的:(设计模式)