三大工厂

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

 

工厂方法和简单工厂的区别在于:工厂方法对工厂进行了一层简单的抽象,使得创建一个具体类的具体方法能多样化

和抽象工厂的区别是抽象工厂 是对多个 创建方法的抽象,,

posted @ 2008-10-29 17:15  游侠_1  阅读(330)  评论(0编辑  收藏  举报