客户代码 1using System; 2using Gof.Test.Factory.Machines; 3 4namespace Gof.Test.Factory.Plan 5{ 6 public class MixerPlanner : MachinePlanner 7 { 8 public MixerPlanner(Machine machine) : base(machine) 9 {10 }11 public override bool ContineWork12 {13 get14 {15 return Machine.HasDone;16 }17 }1819 }20}
一个类层次:
接口定义 1using System;23namespace Gof.Test.Factory4{5 public interface IAcount6 {7 string UserName{get;set;}8 }9} 具体类1 1using System; 2 3namespace Gof.Test.Factory 4{ 5 public class AcountMyself:IAcount 6 { 7 public AcountMyself(string myselft) 8 { 9 _name = myselft;10 }11 private string _name;1213 IAcount 成员#region IAcount 成员1415 public string UserName16 {17 get18 {19 return _name;20 }21 set22 {23 _name = value;24 }25 }2627 #endregion28 }29} 具体类2 1using System; 2 3namespace Gof.Test.Factory 4{ 5 /**//// <summary> 6 /// AcountYourself 的摘要说明。 7 /// </summary> 8 public class AcountYourself:IAcount 9 {10 public AcountYourself(string yourself)11 {12 _name = yourself;13 }1415 private string _name;1617 IAcount 成员#region IAcount 成员1819 public string UserName20 {21 get22 {23 return _name;24 }25 set26 {27 _name = value;28 }29 }3031 #endregion32 }33} 工厂方法 1using System; 2 3namespace Gof.Test.Factory 4{ 5 public class AcountFactory 6 { 7 public AcountFactory() 8 { 9 }10 public static bool IsAfternoon()11 {12 DateTime d = DateTime.Now;13 if(d.Hour > 12)14 {15 return true;16 }17 else18 {19 return false;20 }21 }22 public static IAcount CreateAcount()23 {24 if(IsAfternoon())25 {26 return new AcountMyself("Myself");27 }28 else29 {30 return new AcountYourself("Yourself");31 }32 }33 }34} 客户代码 1 IAcount acount = AcountFactory.CreateAcount();2 Console.WriteLine(acount.UserName);3 Console.ReadLine(); 双类层次结构: 1.Machine类层次结构;定义不同的类型的机器。 基类Machine 1using System; 2using Gof.Test.Factory.Plan; 3 4namespace Gof.Test.Factory.Machines 5{ 6 public class Machine 7 { 8 public Machine() 9 {10 }11 public bool HasDone12 {13 get14 {15 return _hasDone;16 }17 set18 {19 _hasDone = value;20 }21 }private bool _hasDone;2223 public virtual MachinePlanner CreatePlanner()24 {25 return new BasicPlanner(this);26 }27 }28} Mixer 1using System; 2using Gof.Test.Factory.Plan; 3 4 5namespace Gof.Test.Factory.Machines 6{ 7 public class Mixer : Machine 8 { 9 public Mixer()10 {11 }12 public override MachinePlanner CreatePlanner()13 {14 return new MixerPlanner(this);15 }16 }17} 2.计划类层次结构,定义机器的执行计划。 抽象基类 1using System; 2using Gof.Test.Factory.Machines; 3 4namespace Gof.Test.Factory.Plan 5{ 6 public abstract class MachinePlanner 7 { 8 public MachinePlanner(Machine machine) 9 {10 _machine = machine;11 }12 public Machine Machine13 {14 get15 {16 return _machine;17 }18 }19 private Machine _machine;20 public abstract bool ContineWork21 {22 get;23 }24 }25} 基本计划类1 1using System; 2using Gof.Test.Factory.Machines; 3 4namespace Gof.Test.Factory.Plan 5{ 6 public class BasicPlanner:MachinePlanner 7 { 8 public BasicPlanner(Machine machine) : base(machine) 9 {10 }11 public override bool ContineWork12 {13 get14 {15 return Machine.HasDone;16 }17 }18 }19} 基本计划类2 1using System; 2using Gof.Test.Factory.Machines; 3 4namespace Gof.Test.Factory.Plan 5{ 6 public class MixerPlanner : MachinePlanner 7 { 8 public MixerPlanner(Machine machine) : base(machine) 9 {10 }11 public override bool ContineWork12 {13 get14 {15 return Machine.HasDone;16 }17 }1819 }20} 客户代码 1 Gof.Test.Factory.Machines.Mixer mixture1 = new Gof.Test.Factory.Machines.Mixer();2 mixture1.HasDone = true;3 Gof.Test.Factory.Plan.MachinePlanner mixerplanner = mixture1.CreatePlanner();4 if(mixerplanner.ContineWork)5 {6 Console.WriteLine("Mixer can work again");7 } The Factory Method Pattern defines an interface for creating an object, but lets subclasses decide which class to instantiate. Factory Method lets a defer instantiation to subclasses.转载于:https://www.cnblogs.com/nanshouyong326/archive/2007/01/08/614937.html
