设计模式(一)---简单工厂模式
1,简介:简单工厂模式,又称为静态工厂模式,是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
2,简单工厂模式的结构
2.1:简单工厂的通用结构
2.2:示意性实现
2.3:从上图可以看出,简单工厂模式就是由一个工厂类根据传入的参数来决定创建哪个产品的实例
简单工厂模式涉及到工厂角色,抽象产品角色,以及具体产品角色等三个角色
2.3.1:工厂类角色:这个工厂类是简单工厂模式的核心,含有与应用相关的业务逻辑,工厂类在客户端的直接调用下创建产品对象,由一个具体的java类来实现
2.3.2:抽象产品角色:担任这个角色的类是由工厂模式创建的对象的父类,或者是它们共同拥有的接口,抽象产品角色可以用一个java接口或者是抽象类来实现
2.3.3:具体产品角色:工厂模式创建的对象,都是这个角色的实例,具体产品角色由一个具体的java类来实现
2.4:源代码
2.4.1:新建一个食物类的接口。
package SimpleFactory;/*** ******************************************************** * @ClassName: Food * @Description: 食物接口* ***********************************************************/ public interface Food {public void say(); }
2.4.2:建立两个具体产品类 实现食物接口
1:薯条类
package SimpleFactory; /*** ******************************************************** * @ClassName: Chips * @Description: 薯条实体类 实现食品接口 * ***********************************************************/ public class Chips implements Food{@Overridepublic void say(){System.out.println("我是薯条");} }
2:麦香鸡类
package SimpleFactory; /*** ******************************************************** * @ClassName: McChicken * @Description: 麦香鸡实现类 实现食品接口 * ***********************************************************/ public class McChicken implements Food{@Overridepublic void say() {System.out.println("我是麦香鸡");} }
2.4.3:创建工厂类
package SimpleFactory; /*** ******************************************************** * @ClassName: SimpleFacory * @Description: 简单工厂模式工厂类,根据传过来的参数确定需要实例化的对象 * 返回实现类的父类类型 * ***********************************************************/ public class FoodFacory {public static Food getFood(String type){if(type.equalsIgnoreCase("Chips")){return new Chips();}else if(type.equalsIgnoreCase("McChicken")){return new McChicken();}else{System.out.println("没有可以实例化的对象");return null;}} }
2.4.4:创建测试类
package SimpleFactory; /*** ******************************************************** * @ClassName: SimpleFactoryTest * @Description: 简单工厂模式测试类 * ***********************************************************/ public class SimpleFactoryTest {public static void main(String[] args){//实例化Chips chips = (Chips) FoodFacory.getFood("Chips");McChicken chicken = (McChicken) FoodFacory.getFood("McChicken");chips.say();chicken.say();} }
2.4.5:运行测试类,得到如下结果
3:总结
3.1:优点:简单工厂模式的核心是工厂类,这个类含有必要的判断逻辑,可以决定在什么时候创建产品类的实例,而客户端可以直接调用工厂类来创建实例,从而免除直接创建实例的责任,简单工厂模式通过这种方式实现了对实例化责任的分割。
3.2:缺点1,将所有的实例化责任放在一个工厂类里面,如果工厂类不法正常工作,则整个系统崩溃。
2,而在系统的后续扩展中,都需要修改工厂类,扩展较为困难。
3,由于工厂类使用静态方法作为工厂类,而静态方法无法被子类继承,因此,工厂角色无法形成继承的等级结构。
转载于:https://www.cnblogs.com/shun-gege/p/7451048.html
设计模式(一)---简单工厂模式相关推荐
- php的类图怎么生成_PHP设计模式之简单工厂模式
PHP设计模式之简单工厂模式 先从简单工厂入门,不管是面试还是被他人面试,在问到设计模式的时候,大多数人都会提到工厂模式.毫无疑问,工厂相关的几种模式在设计模式中是最出名的也是应用比较广泛的一种模式. ...
- C#设计模式(2)——简单工厂模式
一.引言 这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理解的模式--简单工厂模式. 二.简单工厂 ...
- 工厂模式 java场景_研磨设计模式之简单工厂模式(场景问题)
简单工厂不是一个标准的设计模式,但是它实在是太常用了,简单而又神奇,所以还是需要好好掌握的,就当是对学习设计模式的热身运动吧.为了保持一致性,我们尽量按照学习其它模式的步骤来进行学习. 1 场景问题 ...
- .NET设计模式(1): 简单工厂模式
.NET设计模式(1): 简单工厂模式 最近一直在看设计模式,想把自己的学习笔记与大家分享一下,如果能帮助大家的话,我会非常高兴,同时也欢迎大家指出里面的不足.园子里其实关于此类文章已经很多了,如果d ...
- JS常用的设计模式(2)——简单工厂模式
JS常用的设计模式(2)--简单工厂模式 简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都拥有相同的接口. 这种模式主要用在所实例化的类型在编译期并不能确定, 而是在执行期决定 ...
- 设计模式之简单工厂模式(C#版)
设计模式之简单工厂模式(C#版) 简介 假设有个女朋友 总结 简介 我用最简洁而直接的方式来描述一下,什么是简单工厂模式.一句话就是,工厂类使用switch case语句返回特定类型. 下面,我们用一 ...
- 大牧絮叨设计模式:简单工厂模式
文章目录 1. 简单工厂模式概述 1.1.简单工厂模式核心组件 1.2.简单工厂模式优缺点 2.` Java`实现 公共父类定义 产品具体实现类 简单工厂定义 代码运行测试: 3. `Python`实 ...
- 设计模式之简单工厂模式(Java 实现)
设计模式之简单工厂模式(Java 实现) 本文首发于http://www.imooc.com/wiki/Designlesson/factory.html 简单工厂模式是平时开发过程中最常见的设计模式 ...
- 设计模式之简单工厂模式
一.概述 工厂模式具体包括了简单工厂.工厂方法.抽象工厂,它们是按照从简单到复杂的顺序排列的,属于设计模式中的创建型,其中简单工厂并不属于GOF的23中模式. 但是它是理解其它的工厂模式的一个很好 ...
- 设计模式之简单工厂模式(Simply Factory)摘录
从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种 ...
最新文章
- java判断字符串中是否包含中文 过滤中文
- 寻人 | 一个有趣的职业可能性,与你分享
- 《CSS蝉意花园读书精记》(基础篇---------上.资料篇1)
- html5内容切换特效,html5+jQuery图片和文字内容同时左右切换特效
- springboot干什么的_Spring Boot 项目的这些文件都是干啥用的?
- 列表排序应用FLIP动画(vue)
- 【蓝桥杯单片机】IAP15在线仿真实验:Connecting to target system lost!please reset your target system and try again
- 1022. Digital Library
- Xshell中文乱码问题
- mysql 8.0以上重置密码
- java中properties类_Java中的Properties类详解
- MSAgent 详细解说(下)
- c语言人机大战五子棋,五子棋人机大战将打响 祁观将与AI弈心五番棋对决
- 电视剧《一代枭雄》观后感
- 使用金蝶云星空(以前叫:金蝶K3 CLOUD)后,感觉像踩进了一个坑
- 基于java的志愿信息管理系统_基于jsp的志愿者管理系统-JavaEE实现志愿者管理系统 - java项目源码...
- 典型双层神经网络的正向/反向传播计算图
- 263.Ugly Number||202 happy number||476 Number Complement||136 Single Number
- 设f(x)=∑x^n/n^2,证明f(x)+f(1-x)+lnxln(1-x)=∑1/n^2
- python zip(*zipped)的疑问