设计模式入门:简单工厂
个人公众号【爱做梦的锤子】,全网同id,个站 http://te-amo.site,欢迎关注,里面会分享更多有用知识,还有我的私密照片
文章中部分定义和解释性文字,都是引用百度百科,主要的代码及场景应用为本人原创
简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
场景:在一个管理系统中,有三种用户:管理员,一般用户,匿名用户。为了维护方便,该系统运行在维护时使用临时用户,所以需要一个可以创建三种类型的临时用户的功能。这里就可以使用简单工厂来创建临时用户,并进行相应初始化。
设计
构成
- 工厂(Creator)角色:简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。(SimpleFactory)
- 抽象产品(Product)角色:简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。(User)
- 具体产品(Concrete Product)角色:是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。(AdminUser,AnonymousUser,NormalUser)
实现
代码地址:https://github.com/telundusiji/designpattern
抽象产品 User
@Data
public abstract class User {private String name;private String role;public abstract void init();
}
具体产品 管理员临时用户
public class AdminUser extends User {@Overridepublic void init() {setName("临时用户:张三");setRole("管理员");}
}
具体产品 匿名临时用户
public class AnonymousUser extends User {@Overridepublic void init() {setName("临时用户:XX");setRole("匿名用户");}
}
具体产品 一般临时用户
public class NormalUser extends User {@Overridepublic void init() {setName("临时用户:李四");setRole("一般");}
}
工厂
public class SimpleFactory {public enum Type{ADMIN{protected User getUser(){return new AdminUser();}},NORMAL{protected User getUser(){return new NormalUser();}},ANONYMOUS{protected User getUser(){return new AnonymousUser();}};protected User getUser(){return null;}}public static <T> T createUser(Type type,Class<T> tClass){User user = type.getUser();user.init();return (T)user;}
}
优缺点
优点:
- 工厂类包含了真个类创建的逻辑,外界仅仅需要负责“消费”对象就可以了,而不必管创建及组织过程,明确了各自的职责和权利
缺点:
- 由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,所以如果需要添加新的类,则就需要改变工厂类了。
- 当系统中的具体产品类增多,工厂类的创建实例的逻辑会变得复杂,对系统的维护和扩展非常不利;
个人公众号【爱做梦的锤子】,全网同id,个站 http://te-amo.site,欢迎关注,里面会分享更多有用知识,还有我的私密照片
设计模式入门:简单工厂相关推荐
- 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 简单工厂模式是平时开发过程中最常见的设计模式 ...
- 工厂设计模式、简单工厂设计模式、抽象工厂设计模式
一.简单工厂设计模式.工厂设计模式,抽象工厂设计模式总体分析 简单工厂模式 简单工厂模式不是23种里的一种,简而言之,就是有一个专门生产某个产品的类. 比如下图中的鼠标工厂,专业生产鼠标,给参数0,生 ...
- Java开发组装电脑_设计模式-组装电脑入门简单工厂
前言 简单工厂模式,虽然不在23种设计模式中.但是可以认为是工厂模式的一种特殊实现,并且在日常中使用广泛,所以还是值得我们去学习的. 定义简单工厂模式(Simple Factory Pattern): ...
最新文章
- ​用 Python 动态可视化,看看比特币这几年
- Spring Cloud中Hystrix仪表盘与Turbine集群监控
- [翻译]Protocol Buffer 基础: C++
- markdown 字体颜色_一文搞定Markdown编辑头条号方法
- 两个数相乘积一定比每个因数都大_人教版五年级数学:因数、倍数与分数的整理与复习...
- 组合数学 —— 容斥定理
- SpringMVC 入门示例讲解
- 阿里游戏之心不死?| 畅言
- select2多选框无法手动排序问题[转载]
- JinlinOJ 通化邀请赛 E.GCD and LCM 最大公约数最小公倍数 关系
- 低功耗视频解码芯片-TVP5150
- Android:自定义View实现绚丽的圆形进度条
- houdini 求出曲线的法向 切线以及副法线
- 转:人最大的教养,是善待父母
- Galera-MariaDB多主集群搭建
- 读余光中散文,看到一句诗(In me the tiger sniffs the rose),感觉很经典,摘录如下
- 升级WIFI6路由器,笔记本电脑找不到WIFI
- Outlook邮件客户端邮件如何备份?
- 网络变压器高频参数插入损耗的检测设备和检测方式
- SoftCAM安装流程(适用于泰信T1盒子)