定义

在工厂模式中,我们把被创建的类的对象(或实例)称为产品,把创建产品的对象称为工厂。当需要创建的同一类产品数量是固定的时候,为了简化操作,我使用一个类作为工厂,根据不同的输入参数,决定生产的产品。这种模式叫简单工厂模式。简单工厂 模式属于创建型模式,由于生产方法是静态方法(见下面示例),所以又叫做静态工厂方法(Static Factory Method)注意:由于违背“开放封装原则”,简单工厂模式并不是GoF的23种设计模式之一

实际说明

在以下的示例中,我们模拟了一个游戏的不同职业,如战士(Warrior),法师(Mage)和弓箭手(Archer),它们都派生于 Character类。不同的职业的攻击方式是不一样的,我们在派生的时候,分别进行实现。

class Character{public void attack(){System.out.println("Attack");}
}class Archer extends Character{public void attack(){System.out.println("Shoot an arrow.");}
}class Mage extends Character{public void attack(){System.out.println("Cast a spell.");}
}class Warrior extends Character{public void attack(){System.out.println("Swing a sword.");}
}

在应用场景中,我们构造了一个角色的简单工厂类,根据用户输入的不同字符串来进行生成,代码如下:

class CharaterFactory {public static Charater makeCharacter(String type){switch(type){case "Archer": return new Archer();case "Mage": return new Mage();case "Warrior": return new Warrior();default: return new Charater();}}
}

通过以上的工厂,我们如果需要生产一个法师,只需要调用 Mage mage = CharaterFactory.makeCharacter("Mage") 即可。这样统一成一个函数以后,可以可以方便地对类进行管理。当有变更发生时,只需要关注工厂类即可解决问题。同时单一的工厂类也便于扩展。

为什么不属性GoF的23种经典设计模式

这是由于在工厂中,所能生产的产品是写死的。如果有新产品的加入,我们需要对工厂类的进行直接修改。如在以上示例中,如果新加入一种职业,比如牧师,那么就需要修改方法 makeCharacter(String) 。这样一来,就违背了“开放封闭原则”(即软件实体应该是对扩展是开放的,而对修改是封闭的),从而导致每次需求变更都对源代码进行修改,使代码管理会非常混乱。

其他示例

  • 编译原则中根据运行符进行相应的操作的示例:https://blog.csdn.net/jx1605/article/details/80524296

简单工厂方法模式(Simple Factory Methord)相关推荐

  1. 设计模式:工厂方法模式(Factory Method)和抽象工厂模式(Abstact Factory)

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  2. 设计模式(2):工厂方法模式(Factory Method Pattern)

    1.接着简单工厂模式谈起 在简单工厂模式(静态工厂模式)中,有一个负责创建对象的工厂类,在这个工厂类里负责所有对象的创建,为了根据用户的不同需求创建不同的对象,工厂类需要进行检查与判断: public ...

  3. 转摘:工厂方法模式(Factory Method Pattern)

    工厂方法模式(Factory Method Pattern) 工厂方法模式(Factory Method Pattern)其定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类 ...

  4. 设计模式(5)—— 工厂方法模式(Factory Method,创建型)

    1.概述 使用设计模式可以提高代码的可复用性.可扩充性和可维护性.工厂方法模式(Factory Method Pattern)属于创建型模式,定义一个创建对象的接口函数,但由子类决定实例化某一个类,让 ...

  5. 秒懂设计模式之工厂方法模式(Factory Method Pattern)

    [版权申明] 非商业目的注明出处可自由转载 博文地址:https://blog.csdn.net/ShuSheng0007/article/details/86636494 出自:shusheng00 ...

  6. 设计模式:工厂方法模式(Factory method)

    设计模式:工厂方法模式(Factory method) 一.问题 在前一章中通过披萨的实例介绍了简单工厂模式.在披萨实例中,如果我想根据地域的不同生产出不同口味的披萨,如纽约口味披萨,芝加哥口味披萨. ...

  7. 设计模式——工厂方法模式(Factory Method)

    工厂方法模式:Factory Method 在我们的日常开发中,很多地方都可以用上工厂方法模式(事实是基础开发中,大部分人从来都不会去考虑使用). 工厂方法模式英文定义: Define an inte ...

  8. 工厂方法模式(Factory Method Pattern)

    水果店开业在即,小明需要去进货,考虑到水果的种类和成本问题决定先去探访一下货源和价格,小明发现苹果在A商那边便宜2毛,西瓜在Z商那边便宜3毛,榴莲在C商那边便宜4毛.这里每一个商贩是一个工厂,每个工厂 ...

  9. 设计模式(2)工厂方法模式(Factory Method)

    设计模式(0)简单工厂模式 设计模式(1)单例模式(Singleton) 源码地址 0 工厂方法模式简介 0.0 工厂方法模式定义 工厂方法模式是在简单工厂模式基础上,为解决更复杂的对象创建问题而衍生 ...

最新文章

  1. 瞬发大量并发连接 造成MySQL连接不响应的分析
  2. python大神作品_掌握了这24个顶级Python库,你就是大神!
  3. GitHub 建立远程仓库
  4. iis php打开空白页,windows+IIS+php 访问显示空白页 php版本信息访问正常
  5. Mybatis一二级缓存的理解
  6. mongodb之replSet复制集 + auth
  7. 多台电脑集群运算_Linux服务器集群概念辨识
  8. 智能雷达存在感知技术,家居场景方案应用,毫米波雷达探测方案
  9. intptr java_intptr_t 其实不是指针类型 (转载)
  10. 2022年湖北师范大学招生简章--成人高等教育高起专、专升本学历提升
  11. 学习spss的心得体会
  12. python实现指纹识别毕业论文_指纹识别系统毕业论文.doc
  13. 液晶LCD广告机是什么,主要用途有哪些。广告一体机的种类有哪些。
  14. GraphX入门简介
  15. 软件测试实习生(月薪3k-5k)需要具备哪些技能才能找到工作?
  16. TIA博途中通过关键字AT实现变量覆盖的具体方法及示例程序
  17. RNN代码简单实现(周杰伦歌词示例)
  18. 女人最想让男人知道的48件事(zt)
  19. 微信公众号调起扫码功能
  20. 计算机二级Python真题(六)

热门文章

  1. 物体检测及分类方法总结(提供了很多论文和代码链接)
  2. 文本检测 论文阅读笔记之 Pixel-Anchor: A Fast Oriented Scene Text Detector with Combined Networks
  3. 8年测开经验面试28K公司后,吐血整理出1000道高频面试题和答案
  4. ###好好好###异质信息网络分析与应用综述(石川)--阅读
  5. Luogu P3488 [POI2009]LYZ-Ice Skates
  6. iphoneX布局适配及iOS 11.0系统适配
  7. vue项目中,js根据文件名后缀,判断文件图片、视频、文档、pdf等类型的方法
  8. 语句摘抄——第21周
  9. Autodesk Flame Education 2020 特别版 Mac 交互设计终极视觉特效制作软件
  10. Ubuntu18.04基于ROS和PX4的仿真平台配置