您的位置:首页 > 其它

工厂方法模式

2012-03-11 22:43 337 查看
工厂方法模式(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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: