设计模式学习笔记四:工厂方法(Factory Method)
2008-06-08 10:56
796 查看
1.概述
在软件系统中,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口。如何应对这种变化?提供一种封装机制来隔离出“这个易变对象”的变化,从而保持系统中“其它依赖该对象的对象”不随着需求的改变而改变?这就是要说的Factory Method模式了。
工厂方法模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化那个类。工厂方法使一个类的实例化延迟到其子类。这个借口所指的是一个抽象方法,该方法说明需要创建一个对象,但并不给出具体的的创建方法和创建什么类型的对象。
工厂方法的使用场合:当一个类不知道他所必须创建对象的类或一个类希望由子类来指定他所创建的对象时,可以使用工厂方法。
工厂方法模式结构图:
public abstract class Operation
public class OperationAdd : Operation
public class OperationMul : Operation
public class OprationSub : Operation
public abstract class OperationFactory
public class AddFactory : OperationFactory
public class MulFactory : OperationFactory
public class SubFactory : OperationFactory
static void Main(string[] args)
{
OperationFactory operFactory = new AddFactory();
Operation oper = operFactory.CreateOpreation();
oper.NumbleA = 5;
oper.NumbleB = 4;
double result = oper.GetResult();
Console.WriteLine("结果:{0}",result);
Console.ReadLine();
}
3.总结
工厂方法模式与简单工厂模式再结构上的不同不是很明显。工厂方法类的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上。工厂方法模式之所以有一个别名叫多态性工厂模式是因为具体工厂类都有共同的接口,或者有共同的抽象父类。当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也不需要修改客户端,很好的符合了"开放-封闭"原则。而简单工厂模式在添加新产品对象后不得不修改工厂方法,扩展性不好。工厂方法模式退化后可以演变成简单工厂模式。工厂方法模式退化后可以演变成简单工厂模式。
适用于工厂方法模式: 当一个类不知道它所必须创建的对象的类的时候;当一个类希望由它的子类来指定它所创建的对象的时候;当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。
工厂方法克服了简单工厂违背开放封闭原则的缺点,又保持了分装对象创建过程的优点,工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了他的缺点。缺点就是由于每增加一个产品,就需要加一个产品工厂类。
在软件系统中,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口。如何应对这种变化?提供一种封装机制来隔离出“这个易变对象”的变化,从而保持系统中“其它依赖该对象的对象”不随着需求的改变而改变?这就是要说的Factory Method模式了。
工厂方法模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化那个类。工厂方法使一个类的实例化延迟到其子类。这个借口所指的是一个抽象方法,该方法说明需要创建一个对象,但并不给出具体的的创建方法和创建什么类型的对象。
工厂方法的使用场合:当一个类不知道他所必须创建对象的类或一个类希望由子类来指定他所创建的对象时,可以使用工厂方法。
工厂方法模式结构图:
public abstract class Operation
public class OperationAdd : Operation
public class OperationMul : Operation
public class OprationSub : Operation
public abstract class OperationFactory
public class AddFactory : OperationFactory
public class MulFactory : OperationFactory
public class SubFactory : OperationFactory
static void Main(string[] args)
{
OperationFactory operFactory = new AddFactory();
Operation oper = operFactory.CreateOpreation();
oper.NumbleA = 5;
oper.NumbleB = 4;
double result = oper.GetResult();
Console.WriteLine("结果:{0}",result);
Console.ReadLine();
}
3.总结
工厂方法模式与简单工厂模式再结构上的不同不是很明显。工厂方法类的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上。工厂方法模式之所以有一个别名叫多态性工厂模式是因为具体工厂类都有共同的接口,或者有共同的抽象父类。当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也不需要修改客户端,很好的符合了"开放-封闭"原则。而简单工厂模式在添加新产品对象后不得不修改工厂方法,扩展性不好。工厂方法模式退化后可以演变成简单工厂模式。工厂方法模式退化后可以演变成简单工厂模式。
适用于工厂方法模式: 当一个类不知道它所必须创建的对象的类的时候;当一个类希望由它的子类来指定它所创建的对象的时候;当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。
工厂方法克服了简单工厂违背开放封闭原则的缺点,又保持了分装对象创建过程的优点,工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了他的缺点。缺点就是由于每增加一个产品,就需要加一个产品工厂类。
相关文章推荐
- 设计模式学习笔记——工厂方法(Factory Method)
- [设计模式学习笔记二][创建型模式][工厂方法(Factory Method)]
- 设计模式学习笔记四:工厂方法(Factory Method)
- 设计模式学习笔记:factory method(工厂方法)
- 设计模式学习之工厂方法(Factory Method,创建型模式)(2)
- 【设计模式】学习笔记5:工厂模式(Factory Method)
- 设计模式学习之 Factory method (工厂方法)
- C#面向对象设计模式纵横谈 学习笔记5 Factory Method 工厂方法(创建型模式)
- 设计模式笔记-创建型模式之三--工厂方法:Factory Method
- 设计模式学习笔记三:工厂方法模式
- 设计模式(八)[工厂方法(Factory Method)模式]
- 设计模式的征途—3.工厂方法(Factory Method)模式
- Java设计模式二:抽象工厂模式(Abstract Factory)/工厂方法(Factory Method)
- 设计模式之(Factory method)工厂方法模式
- 设计模式之 Factory Method 工厂方法
- 设计模式学习笔记——工厂(Factory)模式
- java设计模式之工厂模式--普通工厂方法模式(Factory Method)
- 深入浅出设计模式 ------ Factory Method(工厂方法)
- 设计模式学习笔记三:简单工厂(Simple Factory)
- 设计模式学习笔记:抽象工厂和工厂方法的区别