简单工厂:抽象产品,工厂没有抽象出来。
工厂方法:抽象产品,抽象工厂。
抽象工厂:抽象多种产品,抽象工厂。
代码1:工厂抽象部分
using System; using System.Collections.Generic; using System.Text; using System.Reflection; using System.Configuration; namespace AbstractFactory { /// <summary> /// 抽象工厂 /// </summary> public abstract class AbstractClothesFactory { //抽象方法:创建一个上衣 abstract public AbstractCoat CreateCoat(); //抽象方法:创建一个裤子 abstract public AbstractTrousers CreateTrousers(); } /// <summary> ///时尚男装 /// </summary> public class FashionManClothesFactory : AbstractClothesFactory { public override AbstractCoat CreateCoat() { return new CoatMan(); } public override AbstractTrousers CreateTrousers() { return new TrousersMan(); } } /// <summary> /// 时尚女装 /// </summary> public class FashionWomanClothesFactory : AbstractClothesFactory { public override AbstractCoat CreateCoat() { return new CoatWomen(); //throw new Exception("The method or operation is not implemented."); } public override AbstractTrousers CreateTrousers() { return new TrouserWomen(); //throw new Exception("The method or operation is not implemented."); } } }
代码2:抽象产品部分
using System; using System.Collections.Generic; using System.Text; using System.Reflection; using System.Configuration; namespace AbstractFactory { /// <summary> /// 抽象产品----上衣抽象类 /// </summary> public abstract class AbstractCoat { //性别属性 public abstract bool Sex { get; } //样式属性 public abstract string Style { get; } } /// <summary> /// 时尚男性上衣 /// </summary> public class CoatMan : AbstractCoat { private bool sex = true; private string style = "时尚"; /// <summary> /// 重写基类的Sex属性 /// </summary> public override bool Sex { get { return sex; } } /// <summary> /// 重写基类的Style属性 /// </summary> public override string Style { get { return style; } } } /// <summary> /// 时尚男性上衣 /// </summary> public class CoatWomen : AbstractCoat { private bool sex = false; private string style = "时尚"; /// <summary> /// 重写基类的Sex属性 /// </summary> public override bool Sex { get { return sex; } } /// <summary> /// 重写基类的Style属性 /// </summary> public override string Style { get { return style; } } } /// <summary> /// 抽象产品----裤子抽象类 /// </summary> public abstract class AbstractTrousers { //性别属性 public abstract bool Sex { get; } //样式属性 public abstract string Style { get; } } /// <summary> /// 时尚男性裤子 /// </summary> public class TrousersMan : AbstractTrousers { private bool sex = true; private string style = "时尚"; public override bool Sex { get { return sex; } } public override string Style { get { return style; } } } /// <summary> /// 时尚男性裤子 /// </summary> public class TrouserWomen : AbstractTrousers { private bool sex = false; private string style = "时尚"; public override bool Sex { get { return sex; } } public override string Style { get { return style; } } } }
代码3:对工厂进行包装
/// <summary> /// 创建衣服类 /// </summary> public class CreateClothes { private AbstractCoat myCoat; private AbstractTrousers myTrousers; public CreateClothes(AbstractClothesFactory clothes) { myCoat = clothes.CreateCoat(); myTrousers = clothes.CreateTrousers(); } public void ShowMyClothes() { Console.WriteLine("My Clothes:"); string sex = myCoat.Sex ? "男" : "女"; //Console.WriteLine("Coat:{0} {1}", myCoat.Sex ? "男" : "女", myCoat.Style); Console.WriteLine("Coat:{0} {1}", sex, myCoat.Style); sex = myTrousers.Sex ? "男" : "女"; Console.WriteLine("Trousers:{0} {1}", sex, myTrousers.Style); } }
代码4:客户端代码
public class Client { static void Main1(string[] args) { //创建一个工厂类的实例 string assemblyName = ConfigurationManager.AppSettings["assemblyName"]; string fullTypeName = string.Concat(ConfigurationManager.AppSettings["nameSpaceName"], ".", ConfigurationManager.AppSettings["typename"]); AbstractClothesFactory factory = (AbstractClothesFactory)Assembly.Load(assemblyName).CreateInstance(fullTypeName); CreateClothes clothes = new CreateClothes(factory); clothes.ShowMyClothes(); Console.Read(); } }