概述: 定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactorryMethod使一个类的实例化延迟到其子类。
使用性:
1、当一个类不知道它所必须创建的对象的类的时候。
2、当一个类希望由它的子类来指定它所创建的对象的时候。
3、当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。
举例:
工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现图形类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码来
进行。你想要加图像,本来是改工厂类的,而现在是修改客户端。
工厂方法克服了简单工厂违背开放-封闭原则的缺点,又保持了封闭对象创建过程的优点。
//图形工厂
interface IFactory
{
Graph CreateGraph();
}
//图形的长方形工厂
class RectangleFactory:IFactory
{
public Graph createGraph()
{
return new Rectangle();
}
}
//图形的圆形工厂
class RoundnessFactory:IFactory
{
public Graph createGraph()
{
return new Roundness();
}
}
//图形的三角形工厂
class TriangleFactory:IFactory
{
public Graph createGraph()
{
return new Triangle();
}
}
//图像抽象类
Interface Graph
{
public void name();
}
//三角形
class Triangle:Graph
{
public void name()
{
cout<<"三角形";
}
}
//长方形,圆形如上写法//客户端调用的时候只需要这样就可以了//工厂方法模式
IFactory factory =new RectangleFactory()//想要什么图形就创建什么样的工厂;
Graph graph=factory.CreateGraph();
graph.name();