Java描述设计模式(02):简单工厂模式
本文源码:GitHub·点这里 || GitEE·点这里
一、生活场景简介
1、引入场景
订餐流程简单描述
1)、食品抽象类,规定食品的基础属性操作
2)、鱼类,鸡肉类食品类扩展
3)、订餐流程类,根据食品名称,加工指定类型食品
4)、模拟客户端预定操作
2、源代码实现
1)、关系图谱

2)、代码实现
/**
* 简单工厂模式引入场景
*/
public class C01_InScene {
public static void main(String[] args) {
OrderFood1 orderFood = new OrderFood1() ;
orderFood.orderFood("fish") ;
orderFood.orderFood("chicken") ;
}
}
/**
* 订餐流程
*/
class OrderFood1 {
public Food1 orderFood (String foodName){
Food1 food1 = null ;
if (foodName.equals("fish")){
food1 = new FishFood1() ;
food1.setName("黑鱼");
} else if (foodName.equals("chicken")){
food1 = new ChickenFood1() ;
food1.setName("土鸡");
}
if (food1 != null){
food1.foodMaterial();
food1.cookFood();
return food1 ;
} else {
return null ;
}
}
}
/**
* 食物抽象类
*/
abstract class Food1 {
protected String name ;
public abstract void foodMaterial () ;
public void cookFood (){
System.out.println("食品烹饪:" + name);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
/**
* 材料:黑鱼一条
*/
class FishFood1 extends Food1 {
@Override
public void foodMaterial() {
System.out.println("材料:黑鱼一条");
}
}
/**
* 材料:土鸡一号
*/
class ChickenFood1 extends Food1 {
@Override
public void foodMaterial() {
System.out.println("材料:土鸡一号");
}
}
3、缺点分析
1)、OCP原则:软件实体,如类、模块和函数,应当对扩展开放,但对修改关闭。
2)、违反设计模式的OCP原则,新增食品类不方便扩展,代码改动较大。
二、简单工厂模式
1、基本概念
简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,是由一个工厂对象决定创建出哪个类的对象实例。
2、代码逻辑
1)、关系图谱

2)、代码实现
/**
* 简单工厂模式
*/
public class C02_SimpleFactory {
public static void main(String[] args) {
OrderFood2 orderFood2 = new OrderFood2() ;
orderFood2.orderFood("chicken");
}
}
class OrderFood2 {
private SimpleFactory simpleFactory = new SimpleFactory() ;
public void orderFood (String foodName){
simpleFactory.orderFood(foodName) ;
}
}
/**
* 简单工厂类:封装食品的生产流程
*/
class SimpleFactory {
public Food2 orderFood (String foodName){
Food2 food2 = null ;
if (foodName.equals("fish")){
food2 = new FishFood2() ;
food2.setName("黑鱼");
} else if (foodName.equals("chicken")){
food2 = new ChickenFood2() ;
food2.setName("土鸡");
}
if (food2 != null){
food2.foodMaterial();
food2.cookFood();
return food2 ;
} else {
return null ;
}
}
}
abstract class Food2 {
protected String name ;
public abstract void foodMaterial () ;
public void cookFood (){
System.out.println("食品烹饪:" + name);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class FishFood2 extends Food2 {
@Override
public void foodMaterial() {
System.out.println("材料:黑鱼一条");
}
}
class ChickenFood2 extends Food2 {
@Override
public void foodMaterial() {
System.out.println("材料:土鸡一号");
}
}
3、优缺点分析
1)、优点总结
该模式的核心是工厂类。这个类含有必要的逻辑判断,
可以决定在什么时候创建哪一个登录验证类的实例,
而调用者则可以免除直接创建对象的责任。简单工厂模式通过这种做法实现了对责任的分割,
当系统引入新的登录方式的时候无需修改调用者。
2)、缺点总结
这个工厂类集中了所有的创建逻辑,当有复杂的多层次等级结构时,
所有的业务逻辑都在这个工厂类中实现。什么时候它不能工作了,
整个系统都会受到影响。
三、源代码地址
GitHub·地址
https://github.com/cicadasmile/model-arithmetic-parent
GitEE·地址
https://gitee.com/cicadasmile/model-arithmetic-parent

Java描述设计模式(02):简单工厂模式的更多相关文章
- JAVA基础——设计模式之简单工厂模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂 ...
- Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)
jquery提供的serialize方法能够实现. $("#searchForm").serialize();但是,观察输出的信息,发现serialize()方法做的是将表单中的数 ...
- C#设计模式(2)-简单工厂模式
引言 上一遍中介绍了设计模式中的单例模式-C#设计模式(1)-单例模式,本篇将介绍简单工厂模式,也是比较容易理解的一种模式: 简单工厂模式简介 什么是简单工厂模式? 定义一个工厂类,它可以根据参数的不 ...
- C#设计模式(2)——简单工厂模式(转)
C#设计模式(2)——简单工厂模式 一.引言 这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理 ...
- 设计模式之简单工厂模式(Simple Factory)
原文地址:http://www.cnblogs.com/BeyondAnyTime/archive/2012/07/06/2579100.html 今天呢,要学习的设计模式是“简单工厂模式”,这是一个 ...
- iOS设计模式 - (3)简单工厂模式
iOS设计模式 - (3)简单工厂模式 by Colin丶 转载请注明出处: http://blog.csdn.net/hitwhylz/article/ ...
- (1)java设计模式之简单工厂模式
一:简单工厂模式的优点 --->在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Fa ...
- Java 设计模式01 - 简单工厂模式
先要学习设计模式之前的先看看一些基础 UML类图简单说明 可以先看看我的这篇博客: UML类图简单说明,学习编程思路的必会技能 接下来才是重点,开始我们的旅程吧. 一.UML类图展示 我们要用简单工厂 ...
- Java设计模式(1)——简单工厂模式
简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式.通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 一.模式中包含的角色及其职责 1.工厂(Creator)角色 简单 ...
随机推荐
- java面试题干货96-125
这部分主要是与Java Web和Web Service相关的面试题. 96.阐述Servlet和CGI的区别? 答:Servlet与CGI的区别在于Servlet处于服务器进程中,它通过多线程方式运行 ...
- CCF-CSP题解 201812-4 数据中心
题目要求最长边最小的生成树.好吧,这就是一道kruskal MST题. #include <bits/stdc++.h> const int maxn = 50000; const int ...
- CSDN Markdown编辑器插入代码块时不能代码高亮
当我们点击插入代码块按钮,会提示我们在这里插入代码片,我们在三个单引号对之间输入代码后发现并没有实现代码块高亮, 如下图所示: <!DOCTYPE html> <html lang= ...
- Github挂载大文件解决方案
正常情况下,我们上传代码之类的文本文件,都不会太大,可以直接通过[Upload Files]选项直接上传. 但是这样的操作仅限文件大小在25MB以内. 如果你选择的文件超过25MB,那么Github会 ...
- 转载 全角字符unicode码对应表
http://www.mytju.com/classcode/tools/encode_utf8.asp 对应关系查询网站 Uni. GB Uni. GB Uni. GB Uni. GB Uni. G ...
- 查询BPC动态表
今天BASIS说后台有张数据表(/1CPMB/ABLBCAD)数据量已超过20亿,需要归档,但是不清楚是哪个业务模型. 有两种方式可以查询BPC动态生成的表名. (1)根据命名规则 环境前缀:apps ...
- 微信小程序—支付宝小程序与微信小程序的不同点对比
支付宝小程序语法 http://caibaojian.com/aliapp-wxapp.html https://www.cnblogs.com/bgwhite/p/9447639.html http ...
- Things 3 for Mac是什么?如何使用?
为大家介绍一款实用的效率管理软件“Things 3 for Mac”,它通过使用标签和智能过滤条,东西结合了强大的功能和简单性,Leopard风格的来源列表可以快速轻松地进行对焦.与一个美丽的用户界面 ...
- React Native-ios环境的搭建
要在mac系统上搭建RN环境: 一.安装Homebrew.它是一款Mac OS平台下的软件包管理工具. 详见Homebrew的安装这篇文章. 二.安装node和watchman,用Homebrew在命 ...
- SQLServer配置镜像,无法将 ALTER DATABASE 命令发送到远程服务器实例,数据库镜像配置未更改。请确保该服务器已连接,然后重试。
问题描述: 在做镜像的时候镜像已经连接成功,但是见证服务器却报错 然后tcping了端口啥都是通的,后面发现原来是主机名称一样导致的问题 发现host文件里面: C:\Windows\System32 ...