三大工厂
using System;
using System.Web;
public partial class DesignPattern_AbstractFactory : System.Web.UI.Page
{
//三大工厂
//抽象工厂模式堪称gof23种设计模式精典模式之一,它能够解决诸如:通过显示指定类创建对象,紧耦合,对对象表示或实现的依
//赖等等一些问题,有关设计模式的设计原则,所能解决的问题,详见OO与设计模式的原则、目标 。
//抽象工厂模式适用于对“一系列相互依赖的对象”的创建工作,这些对象是相互依赖的,是有联系的。如果仅为一个对象的创建则
//用简单工厂模式或工厂方法模式完全可以实现,没有必要用抽象工厂模式。
//工厂方法,个人感觉有了.net的反射,工厂方法就可以被简单工厂取代了,而且修改起来更方便
//简单工厂模式又称为静态工厂方法(Static Factory Method)模式,属于类的创建型模式,通常根据一个条件(参数)来返回不同的类的实例
//专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类或接口。
protected void Page_Load(object sender, EventArgs e)
{
//简单工厂的使用
IMan man = Factory.CreatMan("C");
man.Fuck();
man = Factory.CreatMan("K");
man.Fuck();
///抽象工厂的使用
CountryFactory country = new PerfectCountry();
IMan newman = country.CreatMan();
IPlane newplane = country.CreatPlane();
newman.Fuck();
newplane.Fly();
}
}
#region 简单工厂 start
public interface IMan
{
void Fuck();
}
public class ChineseMan : IMan
{
public void Fuck()
{
HttpContext.Current.Response.Write("我是中国人,喜欢上清纯漂亮的小姑娘<br>");
}
}
public class AmericanMan : IMan
{
public void Fuck()
{
HttpContext.Current.Response.Write("我是美国人,喜欢上大胸大屁股的骚货<br>");
}
}
public class KoreaMan : IMan
{
public void Fuck()
{
HttpContext.Current.Response.Write("我是韩国人,喜欢上变个性的人<br>");
}
}
public class Factory
{
public static IMan CreatMan(string Country)
{
switch (Country)
{
case "A": return new AmericanMan(); break;
case "C": return new ChineseMan(); break;
case "K": return new KoreaMan(); break;
}
return null;
}
}
#endregion 简单工厂 end
#region 抽象工厂
//现在增加一对象Plane
public interface IPlane
{
void Fly();
}
public class F22 : IPlane
{
public void Fly()
{
HttpContext.Current.Response.Write("最强大的机机<br>");
}
}
public class F10 : IPlane
{
public void Fly()
{
HttpContext.Current.Response.Write("高研制出来自主开发的3代机<br>");
}
}
public class F0 : IPlane
{
public void Fly()
{
HttpContext.Current.Response.Write("我是半成品,还没出来呢<br>");
}
}
public abstract class CountryFactory
{
public abstract IPlane CreatPlane();
public abstract IMan CreatMan();
}
public class AmericanFactory : CountryFactory
{
public override IPlane CreatPlane()
{
return new F22();
}
public override IMan CreatMan()
{
return new AmericanMan();
}
}
public class Chinese : CountryFactory
{
public override IPlane CreatPlane()
{
return new F10();
}
public override IMan CreatMan()
{
return new ChineseMan();
}
}
public class PerfectCountry : CountryFactory//抽象工厂的优点就展示在这里了,可以并行的扩展,任意的组合
{
public override IPlane CreatPlane()
{
return new F22();
}
public override IMan CreatMan()
{
return new ChineseMan();
}
}
#endregion
工厂方法和简单工厂的区别在于:工厂方法对工厂进行了一层简单的抽象,使得创建一个具体类的具体方法能多样化
和抽象工厂的区别是抽象工厂 是对多个 创建方法的抽象,,