设计模式 - 工厂方法

定义

Define an interface for creating an object, but let subclasses decide which class to instantiate.
Factory Method lets a class defer instantiation to subclasses.

Also known as: Virtual Constructor

UML

  1. 类接口
  2. 具体类
  3. 工厂基类,创建对象的接口。可在调用者的方法中传入具体工厂进行初始化。
  4. 具体工厂,子类实例化。

1、3是稳定的,2、4是变化的。

实例

多地日志记录,不同对象的分割处理

在编写代码时,无法预知对象确切类别及其依赖关系时(延迟);
希望用户能扩展软件库或框架的内部组件时;
希望复用现有对象来节省系统资源(数据库连接、文件系统、网络资源等),而不是每次都重新创建对象;

比较

此模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(依赖具体类),保持对象创建的稳定。它是接口抽象之后的第一步工作。
开发初期都会使用此模式,解决“单个对象”的需求变化(简单,可通过子类进行定制),随后演化为使用 抽象工厂、原型模式、生成器等更灵活、更复杂的模式。

比较 工厂方法 备注
抽象工厂 一组工厂方法可扩展为抽象工厂 抽象工厂通常基于一组工厂方法
迭代器 同时使用工厂方法和迭代器来让子类集合返回不同类型的迭代器,并使得迭代器与集合相匹配
原型 工厂方法基于继承,但不需要初始化步骤 原型不基于继承,但需要对被复制对象进行复杂的初始化
模板方法 工厂方法是模板方法的一种特殊形式,可以作为一个大型模板方法中的一个步骤
posted @   wesson2019  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
历史上的今天:
2021-04-21 Ling应用
点击右上角即可分享
微信分享提示