设计模式-工厂方法模式

导览:开篇(23种设计模式)面向对象设计的6大原则

创建型结构型行为型
工厂方法(Factory Method)<类>适配器(Adapter)<类, 对象>解释器(Interpreter)<类>
抽象工厂(Abstract Factory)<对象>桥接(Bridge)<对象>模板方法(Template Method)<对象>
建造者(Builder)<对象>组合(Composite)<对象>责任链(Chain of Responsibility)<对象>
原型(Prototype)<对象>装饰者(Decorator)<对象>命令(Command)<对象>
单例(Singleton)<对象>外观(Facade)<对象>迭代器(Iterator)<对象>
享元(Flyweight)<对象>中介者(Mediator)<对象>
代理(Proxy)<对象>备忘录(Memento)<对象>
观察者(Observer)<对象>
状态(State)<对象>
策略(Strategy)<对象>
访问者(Visitor)<对象>

工厂方法模式

模式描述

在这里插入图片描述
工厂方法模式定义了一个用于创建对象的接口,让子类决定实例化那一个类,使得一个类的实例化延迟到它的子类。
其中Creator类中的FactoryMethod接口就是一个工厂方法,Creator的子类ConcreteCreator通过重写工厂方法来创建自己想要的产品对象。

优缺点

优点:

  • 不会将特定应用有关的类绑定到自己的代码中。代码仅处理Product的接口,因此它可以和任何ConcreteProduct类一起使用

缺点:

  • 为了创建一个特定的ConcreteProduct对象,就不得不创建对应的ConcreteCreator子类

适用场景

  • 当一个类不知道它所必须创建的对象的类的时候。例如文件另存为支持多种格式时,只有在实际选择后才知道选择的格式。
  • 当一个类希望由它的子类来指定它所创建的对象的时候。当支持多种数据库连接时,在运行时指定连接哪种数据库。
  • 当类将创建对象的职责委托给多个帮助子类中的某一个,并且把你希望将哪一个帮助子类是代理者这一信息局部化的时候。暂时未理解。

扩展使用

  • 参数化工厂方法。给工厂方法增加一个类型参数,这样工厂方法就能根据类型来创建多种不同类型的产品。
Product* FactoryMethod(ProductType type)
{
	switch(type)
	{
		case A:  return new ProductA;
		case B:  return new ProductB;
		...
	}
	return nullptr;
}

相关模式

抽象工厂(Abstract Factory)经常用工厂方法来实现,工厂方法通常在模板方法(Template Method)中被调用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值