极速理解设计模式系列:3.简单工厂模式(Simple Factory Pattern)

来源:互联网 发布:电磁仿真软件 编辑:程序博客网 时间:2024/05/18 00:55

四个角色:抽象产品(Product)、具体产品(Concrete Product)、工厂(Creator)、客户端(Client) 

        抽象产品(Product):需要创建的各种产品的父类。这类产品有共同的接口。

        具体产品(Concrete Product):需要创建的具体对象。

        工厂(Creator):内部逻辑可以控制生成目标对象。

        客户端(Client):实例化工厂,然后工厂根据传入参数得到各种产品。调用产品实现不同功能。

 实现思路:首先将工厂实例化,然后使用工厂创建产品赋值给抽象产品的引用,然后通过抽象产品的公共接口调用具体产品的方法以实现功能。

类图: 

应用场景:苹果公司的工厂生产iphone 4、ipad 2、ipod nano 6。

分析:这里多种产品都可以运行,所以有一个公共方法,然后抽象为父类。

        下面我们在控制台程序去演示一下如何使用Simple Factory Pattern:

        一、抽象产品(Product):

复制代码
   //抽象产品(Product)    abstract class Apple    {        public abstract void Run();    }

复制代码
        二、具体产品(Concrete Product):
复制代码
    //具体产品(Concrete Product)    class Iphone : Apple    {        public override void Run()        {            Console.WriteLine("iphone 4 开始运行!");        }    }    //具体产品(Concrete Product)    class Ipad : Apple    {        public override void Run()        {            Console.WriteLine("ipad 2 开始运行!");        }    }    //具体产品(Concrete Product)    class IpodNano : Apple    {        public override void Run()        {            Console.WriteLine("ipod Nano 6 开始运行!");        }    }

复制代码

        三、工厂(Creator):

复制代码
    //工厂(Creator)    class AppleFactory    {        public Apple CreateApple(string productName)        {            switch (productName.ToUpper())            {                 case "IPHONE":                    return new Iphone();                case "IPAD":                    return new Ipad();                case "IPODNANO":                    return new IpodNano();                default:                    return null;            }        }    }

复制代码

        四、客户端(Client):

复制代码
    //客户端(Client)    class Program    {        static void Main(string[] args)        {            AppleFactory factory = new AppleFactory();            Apple iphone= factory.CreateApple("iphone");            iphone.Run();            Apple ipad = factory.CreateApple("ipad");            ipad.Run();            Apple ipodnano = factory.CreateApple("ipodnano");            ipodnano.Run();            Console.ReadLine();        }    }

0 0