抽象工厂
简单工厂:抽象产品,工厂没有抽象出来。
工厂方法:抽象产品,抽象工厂。
抽象工厂:抽象多种产品,抽象工厂。
代码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();
}
}
浙公网安备 33010602011771号