您的位置:首页 > 其它

设计模式-工厂方法模式(Factory Method Pattern)

2012-07-11 17:36 274 查看
工厂方法模式(Factory Method):将创建一个产品的任务,推迟到子类中。核心工厂类不再负责产品的创建。

这样核心类成为一个抽象工厂。负责具体子类工厂必须实现的接口。这样的好处是在不改变具体子类工厂的前提下

增加新的产品。

工厂方法模式角色与结构:

抽象工厂角色(AbstractFactory):是工厂方法模式的核心,创建的子类工厂必须实现这个接口。

具体工厂角色(Concrete Creator):实现抽象工厂的具体工厂类,包含与应用程序密切相关的逻辑,

并且受到应用程序调用创建产品对象。如ProductAFactory,ProductBFactory

抽象产品角色(Product):工厂方法模式创建的对象的基类或者接口。

具体产品角色(Concrete Product):实现了抽象产品角色的具体类。其对象由具体工厂创建产生。他们之间一般为一一对应。

代码:

/// <summary>

/// 抽象工厂

/// </summary>

public abstract class AbstractFactory

{

public abstract Product Factory();

}

/// <summary>

/// 产品A的创建工厂

/// </summary>

public class ProductAFactory:AbstractFactory

{

public override Product Factory()

{

return new ConcreteProductA();

}

}

/// <summary>

/// 产品B的创建工厂

/// </summary>

public class ProductBFactory : AbstractFactory

{

public override Product Factory()

{

return new ConcreteProductB();

}

}

/// <summary>

/// 产品抽象类

/// </summary>

public abstract class Product

{

/// <summary>

/// 唯一标识

/// </summary>

public string ID

{

get;

set;

}

/// <summary>

/// 产品名称

/// </summary>

public string Name

{

get;

set;

}

public abstract void Operate();

public void GetName()

{

Console.WriteLine("the name of Product is "+Name);

}

}

/// <summary>

/// 产品A

/// </summary>

public class ConcreteProductA : Product

{

public override void Operate()

{

Console.WriteLine("this is the Class if ConcreteProductA");

}

}

/// <summary>

/// 产品B

/// </summary>

public class ConcreteProductB : Product

{

public override void Operate()

{

Console.WriteLine("this is the Class if ConcreteProductB");

}

}

class Program

{

static void Main(string[] args)

{

#region 工厂方法模式

AbstractFactory factoryA = null; // 工厂A

Product productA = null; // 产品A

factoryA = new ProductAFactory();

productA = factoryA.Factory();

productA.Name = "ProductA";

productA.Operate();

productA.GetName();

AbstractFactory factoryB = null; // 工厂B

Product productB = null; // 产品B

factoryB = new ProductBFactory();

productB = factoryB.Factory();

productB.Name = "ProductB";

productB.Operate();

productB.GetName();

return;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: