工厂方法模式
来源:互联网 发布:raysource mac 编辑:程序博客网 时间:2024/06/05 20:58
工厂方法模式(Factory Method Pattern):
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例延迟到其子类。
工厂方法模式是简单工厂模式的的抽象和推广。在简单工厂模式中,一个工厂类处于对产品类进许实例
化的中心位置,它知道每一个产品类的细节,并决定何时哪一个产品类应当被实例化。简单工厂模式的
优点是能够使客户端独立于产品的创建过程,并且在系统中引入新产品时无需对客户端进许修改,缺点
是当有新产品加入到系统中时,必须修改工厂类,以加入必要的逻辑处理。这就违背了开放--封闭原则。
而工厂方法则很好的解决了这一问题。
实例:兵工厂生成战斗机器
兵工厂能生产出各种战斗机器,但世界上没有一家工厂能够生产出所有的战斗机、坦克、战舰等待。它们都是
由不同的厂家生产的。
/// <summary>
/// Product产品基类:战斗机器
/// </summary>
public abstract class ProductWarMachine
{
public abstract void WarType();
}
/// <summary>
/// ConcreteProduct类:真实的产品类,实现接口Product类
/// 战斗机
/// </summary>
public class Fighter:ProductWarMachine
{
private string _name;
public Fighter(string name)
{
this._name = name;
}
public override void WarType()
{
Console.WriteLine("我是{0}型战斗机", _name);
}
}
/// <summary>
/// 坦克
/// </summary>
public class Tank:ProductWarMachine
{
private string _name;
public Tank(string name)
{
this._name = name;
}
public override void WarType()
{
Console.WriteLine("我是{0}型坦克", _name);
}
}
/// <summary>
/// 战舰
/// </summary>
public class Warship:ProductWarMachine
{
private string _name;
public Warship(string name)
{
this._name = name;
}
public override void WarType()
{
Console.WriteLine("我是{0}型战舰", _name);
}
}
/// <summary>
/// 工厂接口:声明工厂方法,返回一个真实产品
/// </summary>
public interface IFactory
{
/// <summary>
/// 用于实例化真实产品类
/// </summary>
/// <returns></returns>
ProductWarMachine CreateArmShop(string name);
}
/// <summary>
/// ConcreteFactory:真实工厂类
/// 创建一个战斗机类
/// </summary>
public class FighterFactory:IFactory
{
#region IFactory 成员
public ProductWarMachine CreateArmShop(string name)
{
return new Fighter(name);
}
#endregion
}
/// <summary>
/// 创建一个坦克类
/// </summary>
public class TankFactory:IFactory
{
#region IFactory 成员
public ProductWarMachine CreateArmShop(string name)
{
return new Tank(name);
}
#endregion
}
/// <summary>
/// 创建一个战舰类
/// </summary>
public class WarshipFactory:IFactory
{
#region IFactory 成员
public ProductWarMachine CreateArmShop(string name)
{
return new Warship(name);
}
#endregion
}
应用:
//工厂方法模式
IFactory factory = new FighterFactory();
ProductWarMachine fighter = factory.CreateArmShop("歼10");
fighter.WarType();
IFactory factory2 = new TankFactory();
ProductWarMachine tank = factory2.CreateArmShop("M1A1");
tank.WarType();
- 工厂模式 -- 工厂方法
- 工厂模式-工厂方法
- 工厂模式-工厂方法
- 工厂 > 工厂方法模式
- 工厂模式-工厂方法模式
- 工厂模式-工厂方法模式
- 工厂模式---工厂方法模式
- 【模式】工厂方法模式
- 工厂方法,抽象工厂模式
- C#工厂模式-工厂方法
- 工厂模式 和工厂方法
- 工厂模式-C-工厂方法
- 工厂模式以及工厂方法
- 简单工厂、工厂方法、抽象工厂模式
- 简单工厂、工厂方法、抽象工厂模式
- 工厂模式(简单工厂、工厂方法)
- 简单工厂|工厂方法|抽象工厂模式
- 设计模式-工厂模式(简单工厂模式+工厂方法模式)
- js+ajax学习笔记总结
- MyEclipse6.5 SVN安装方法
- Struts2 - Form Tags_HelloWorld升级版(从零开始学习Strust2_02)
- setsockopt函数解析(转)
- Porting OpenCV 2.3.1 to iPhone 3GS/4/4S
- 工厂方法模式
- javascript 设计模式
- 通过SharedPreference对配置的参数进行储存
- [笨木头“创业”路]No.4 历练
- 多路归并排序
- quicker.em
- getsockopt,setsockopt用法小结
- Ubuntu学习笔记之:如何拨号上网
- Windows内核对象无效返回值——NULL或者INVALID_HANDLE_VALUE??