工厂方法模式

来源:互联网 发布:pp助手mac版怎么删除 编辑:程序博客网 时间:2024/06/09 16:43

工厂方法(Factory Method)模式

工厂方法(FactoryMethod)模式是类的创建模式,其用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。

Factory Method模式角色与结构

抽象工厂(Creator)角色

是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。

具体工厂(Concrete Creator)角色

这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。在上图中有两个这样的角色:BulbCreatorTubeCreator

抽象产品(Product)角色

工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。在上图中,这个角色是Light

具体产品(Concrete Product)角色

这个角色实现了抽象产品角色所定义的接口。某具体产品有专门的具体工厂创建,它们之间往往一一对应。

程序实例

Light抽象类:

public abstract class Light

    {

        public abstract void TurnOn();

        public abstract void TurnOff();

    }

BulbLight:

public class BulbLight:Light

    {

        public override void TurnOn()

        {

            Console.Write("Bulb light is turn on") ;

        }

 

        public override void TurnOff()

        {

            Console.Write("Bulb light is turn off");

        }

    }

TubeLight:

public class TubeLight:Light

    {

 

        public override void TurnOn()

        {

            Console.Write("Tube light is turn on"); ;

        }

 

        public override void TurnOff()

        {

            Console.Write("Tube light is turn off");;

        }

    }

Creator抽象工厂类:

public abstract class Creator

    {

        public abstract Light factory();

    }

BulbCreator:

public class BulbCreator:Creator

    {

        public override Light factory()

        {

            return new BulbLight();

        }

    }

TubeCreator:

public class TubeCreator:Creator

    {

        public override Light factory()

        {

            return new TubeLight();

        }

    }

客户端Client:

public class Client

    {

        static void Main(string[] args)

        {

            Creator bulbCreator = new BulbCreator();

            Creator tubeCreator = new TubeCreator();

            Light bulbLight = bulbCreator.factory();

            Light tubeLight = tubeCreator.factory();

            bulbLight.TurnOff();

            bulbLight.TurnOn();

 

            tubeLight.TurnOff();

            tubeLight.TurnOn();

            Console.ReadKey();

        }

    }

工厂方法的活动序列图

活动过程包括:

客户端创建BulbCreator对象,客户端持有此对象的类型是Creator,而实际类型是BulbCreator。然后客户端调用BulbCreatorfactory方法,之后BulbCreator调用BulbLight的构造函数创造出产品BulbLight对象。

工厂方法模式与简单工厂模式

工厂方法模式与简单工厂模式再结构上的不同不是很明显。工厂方法类的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上。

工厂方法模式之所以有一个别名叫多态性工厂模式是因为具体工厂类都有共同的接口,或者有共同的抽象父类。

当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也不需要修改客户端,很好的符合了"开放-封闭"原则。而简单工厂模式在添加新产品对象后不得不修改工厂方法,扩展性不好。

工厂方法模式退化后可以演变成简单工厂模式。

原创粉丝点击