您的位置:首页 > 其它

抽象工厂模式(AbstractFactory)+反射技术

2012-05-14 21:55 281 查看
麦当劳(McDonalds)和肯德基(KFC)快餐店都经营汉堡(Hamburg)和可乐(Cola),用C#控制台应用程序实现这两个快餐店经营产品的抽象工厂模式。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace AbstractFactory
{
//汉堡接口
interface IHamburg
{
}
//KFC汉堡
class KFCHamburg : IHamburg
{
public KFCHamburg()
{
Console.WriteLine("KFC卖出了一份汉堡!");
}
}
//MD汉堡
class MDHamburg : IHamburg
{
public MDHamburg()
{
Console.WriteLine("McDonalds卖出了一份汉堡!");
}
}
//可乐接口
interface ICola
{
}
//KFC可乐
class KFCCola : ICola
{
public KFCCola()
{
Console.WriteLine("KFC卖出了一份可乐!");
}
}
//MD可乐
class MDCola : ICola
{
public MDCola()
{
Console.WriteLine("McDonalds卖出了一份可乐!");
}
}
//快餐店接口
interface INoshery
{
ICola CreateCola();
IHamburg CreateHamburg();
}
//KFC快餐店
class KFCNoshery : INoshery
{
public ICola CreateCola()
{
return new KFCCola();
}
public IHamburg CreateHamburg()
{
return new KFCHamburg();
}
}
//MD快餐店
class MDNoshery : INoshery
{
public ICola CreateCola()
{
return new MDCola();
}
public IHamburg CreateHamburg()
{
return new MDHamburg();
}
}
class Program
{
static void Main(string[] args)
{
INoshery noshery = new KFCNoshery();
ICola cola = noshery.CreateCola();
IHamburg hamburg = noshery.CreateHamburg();
noshery = new MDNoshery();
cola = noshery.CreateCola();
hamburg = noshery.CreateHamburg();
}
}
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;//使用反射技术

namespace AbstractFactory
{
//汉堡接口
interface IHamburg
{
}
//KFC汉堡
class KFCHamburg : IHamburg
{
public KFCHamburg()
{
Console.WriteLine("KFC卖出了一份汉堡!");
}
}
//MD汉堡
class MDHamburg : IHamburg
{
public MDHamburg()
{
Console.WriteLine("McDonalds卖出了一份汉堡!");
}
}
//可乐接口
interface ICola
{
}
//KFC可乐
class KFCCola : ICola
{
public KFCCola()
{
Console.WriteLine("KFC卖出了一份可乐!");
}
}
//MD可乐
class MDCola : ICola
{
public MDCola()
{
Console.WriteLine("McDonalds卖出了一份可乐!");
}
}
//抽象工厂模式缺点:如果再增加一个产品的话,要根据工厂的数量增加同等数量的类,
//还要修改每个工厂类的代码。优化(1)使用简单工厂进行优化,即去掉工厂接口和具体工厂类,
//用一个类来代替,在这个类中使用switch语句进行判断,来满足不同的工厂生产不同的
//产品。优化(2)使用反射技术进行优化。
class Noshery
{
private string NosheryName;
private string AssemblyName;
public Noshery(string AssemblyName, string NosheryName)
{
this.AssemblyName = AssemblyName;
this.NosheryName = NosheryName;
}
public ICola CreateCola()
{
string className = AssemblyName + "." + NosheryName + "Cola";
return (ICola)Assembly.Load(AssemblyName).CreateInstance(className);
}
public IHamburg CreateHamburg()
{
string className = AssemblyName + "." + NosheryName + "Hamburg";
return (IHamburg)Assembly.Load(AssemblyName).CreateInstance(className);
}
}
class Program
{
static void Main(string[] args)
{
Noshery kfc = new Noshery("AbstractFactory","KFC");
kfc.CreateCola();
kfc.CreateHamburg();
Noshery md = new Noshery("AbstractFactory","MD");
md.CreateCola();
md.CreateHamburg();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: