简单工厂方法模式(Simple Factory Methord)
定义
在工厂模式中,我们把被创建的类的对象(或实例)称为产品,把创建产品的对象称为工厂。当需要创建的同一类产品数量是固定的时候,为了简化操作,我使用一个类作为工厂,根据不同的输入参数,决定生产的产品。这种模式叫简单工厂模式。简单工厂 模式属于创建型模式,由于生产方法是静态方法(见下面示例),所以又叫做静态工厂方法(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)相关推荐
- 设计模式:工厂方法模式(Factory Method)和抽象工厂模式(Abstact Factory)
欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...
- 设计模式(2):工厂方法模式(Factory Method Pattern)
1.接着简单工厂模式谈起 在简单工厂模式(静态工厂模式)中,有一个负责创建对象的工厂类,在这个工厂类里负责所有对象的创建,为了根据用户的不同需求创建不同的对象,工厂类需要进行检查与判断: public ...
- 转摘:工厂方法模式(Factory Method Pattern)
工厂方法模式(Factory Method Pattern) 工厂方法模式(Factory Method Pattern)其定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类 ...
- 设计模式(5)—— 工厂方法模式(Factory Method,创建型)
1.概述 使用设计模式可以提高代码的可复用性.可扩充性和可维护性.工厂方法模式(Factory Method Pattern)属于创建型模式,定义一个创建对象的接口函数,但由子类决定实例化某一个类,让 ...
- 秒懂设计模式之工厂方法模式(Factory Method Pattern)
[版权申明] 非商业目的注明出处可自由转载 博文地址:https://blog.csdn.net/ShuSheng0007/article/details/86636494 出自:shusheng00 ...
- 设计模式:工厂方法模式(Factory method)
设计模式:工厂方法模式(Factory method) 一.问题 在前一章中通过披萨的实例介绍了简单工厂模式.在披萨实例中,如果我想根据地域的不同生产出不同口味的披萨,如纽约口味披萨,芝加哥口味披萨. ...
- 设计模式——工厂方法模式(Factory Method)
工厂方法模式:Factory Method 在我们的日常开发中,很多地方都可以用上工厂方法模式(事实是基础开发中,大部分人从来都不会去考虑使用). 工厂方法模式英文定义: Define an inte ...
- 工厂方法模式(Factory Method Pattern)
水果店开业在即,小明需要去进货,考虑到水果的种类和成本问题决定先去探访一下货源和价格,小明发现苹果在A商那边便宜2毛,西瓜在Z商那边便宜3毛,榴莲在C商那边便宜4毛.这里每一个商贩是一个工厂,每个工厂 ...
- 设计模式(2)工厂方法模式(Factory Method)
设计模式(0)简单工厂模式 设计模式(1)单例模式(Singleton) 源码地址 0 工厂方法模式简介 0.0 工厂方法模式定义 工厂方法模式是在简单工厂模式基础上,为解决更复杂的对象创建问题而衍生 ...
最新文章
- 瞬发大量并发连接 造成MySQL连接不响应的分析
- python大神作品_掌握了这24个顶级Python库,你就是大神!
- GitHub 建立远程仓库
- iis php打开空白页,windows+IIS+php 访问显示空白页 php版本信息访问正常
- Mybatis一二级缓存的理解
- mongodb之replSet复制集 + auth
- 多台电脑集群运算_Linux服务器集群概念辨识
- 智能雷达存在感知技术,家居场景方案应用,毫米波雷达探测方案
- intptr java_intptr_t 其实不是指针类型 (转载)
- 2022年湖北师范大学招生简章--成人高等教育高起专、专升本学历提升
- 学习spss的心得体会
- python实现指纹识别毕业论文_指纹识别系统毕业论文.doc
- 液晶LCD广告机是什么,主要用途有哪些。广告一体机的种类有哪些。
- GraphX入门简介
- 软件测试实习生(月薪3k-5k)需要具备哪些技能才能找到工作?
- TIA博途中通过关键字AT实现变量覆盖的具体方法及示例程序
- RNN代码简单实现(周杰伦歌词示例)
- 女人最想让男人知道的48件事(zt)
- 微信公众号调起扫码功能
- 计算机二级Python真题(六)
热门文章
- 物体检测及分类方法总结(提供了很多论文和代码链接)
- 文本检测 论文阅读笔记之 Pixel-Anchor: A Fast Oriented Scene Text Detector with Combined Networks
- 8年测开经验面试28K公司后,吐血整理出1000道高频面试题和答案
- ###好好好###异质信息网络分析与应用综述(石川)--阅读
- Luogu P3488 [POI2009]LYZ-Ice Skates
- iphoneX布局适配及iOS 11.0系统适配
- vue项目中,js根据文件名后缀,判断文件图片、视频、文档、pdf等类型的方法
- 语句摘抄——第21周
- Autodesk Flame Education 2020 特别版 Mac 交互设计终极视觉特效制作软件
- Ubuntu18.04基于ROS和PX4的仿真平台配置