设计模式-工厂方法模式(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;
}
}
这样核心类成为一个抽象工厂。负责具体子类工厂必须实现的接口。这样的好处是在不改变具体子类工厂的前提下
增加新的产品。
工厂方法模式角色与结构:
抽象工厂角色(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;
}
}
相关文章推荐
- 设计模式系列(五)工厂方法模式(Factory Method Pattern)
- 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern)
- Net设计模式实例之工厂方法模式( Factory Method Pattern)
- 解读设计模式----工厂方法模式(FactoryMethod Pattern)
- JAVA设计模式之 工厂方法模式【Factory Method Pattern】
- 设计模式(Design Pattern)之工厂方法模式(Factory Method Pattern)
- 解读设计模式----工厂方法模式(FactoryMethod Pattern)
- 设计模式---工厂方法模式(Factory Method Pattern)
- Net设计模式实例之工厂方法模式( Factory Method Pattern)
- C#设计模式之二工厂方法模式(Factory Method Pattern)【创建型】
- 如何让孩子爱上设计模式 —— 5.工厂方法模式(Factory Method Pattern)
- 设计模式(创建型)之工厂方法模式(Factory Method Pattern)
- 设计模式学习(一)——工厂方法模式【Factory Method Pattern】
- Net设计模式实例之工厂方法模式( Factory Method Pattern)
- 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern)
- 设计模式拾荒之工厂方法模式(Factory Method Pattern): 简单工厂并不是一种设计模式
- 我所理解的设计模式(C++实现)——工厂方法模式(Factory Method Pattern)
- 设计模式学习笔记--工厂方法模式(Factory Method Pattern)【创建型模式】
- Java设计模式——创建型模式——工厂方法模式(Factory METHOD Pattern)