本文源码: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):简单工厂模式的更多相关文章

  1. JAVA基础——设计模式之简单工厂模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂 ...

  2. Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)

    jquery提供的serialize方法能够实现. $("#searchForm").serialize();但是,观察输出的信息,发现serialize()方法做的是将表单中的数 ...

  3. C#设计模式(2)-简单工厂模式

    引言 上一遍中介绍了设计模式中的单例模式-C#设计模式(1)-单例模式,本篇将介绍简单工厂模式,也是比较容易理解的一种模式: 简单工厂模式简介 什么是简单工厂模式? 定义一个工厂类,它可以根据参数的不 ...

  4. C#设计模式(2)——简单工厂模式(转)

    C#设计模式(2)——简单工厂模式   一.引言 这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理 ...

  5. 设计模式之简单工厂模式(Simple Factory)

    原文地址:http://www.cnblogs.com/BeyondAnyTime/archive/2012/07/06/2579100.html 今天呢,要学习的设计模式是“简单工厂模式”,这是一个 ...

  6. iOS设计模式 - (3)简单工厂模式

    iOS设计模式 - (3)简单工厂模式           by Colin丶 转载请注明出处:              http://blog.csdn.net/hitwhylz/article/ ...

  7. (1)java设计模式之简单工厂模式

    一:简单工厂模式的优点          --->在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Fa ...

  8. Java 设计模式01 - 简单工厂模式

    先要学习设计模式之前的先看看一些基础 UML类图简单说明 可以先看看我的这篇博客: UML类图简单说明,学习编程思路的必会技能 接下来才是重点,开始我们的旅程吧. 一.UML类图展示 我们要用简单工厂 ...

  9. Java设计模式(1)——简单工厂模式

    简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式.通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 一.模式中包含的角色及其职责 1.工厂(Creator)角色 简单 ...

随机推荐

  1. django----csrf跨站请求伪造 auth组件 settings源码 importlib模块

    目录 importlib模块 csrf跨站请求伪造 form表单发送 ajax发送 csrf装饰器 auth模块 如何创建超级用户(root) 创建用户 校验用户名和密码是否正确 保存用户登录状态 判 ...

  2. Android Studio 中java 文件报错红色J

    用常用的方法清除Android Studio的缓存然后重启,"File" -> "Invalidate Cashes / Restart" -> & ...

  3. Python 分支、循环、条件与枚举

    单行注释:# 注释内容多行注释:''' 注释内容 '''   Python 中有三种控制流语句: if for while 注:Python 中没有 Switch 这种开关语句 if 语句检测条件真, ...

  4. Spring Cloud进阶之路 | 二:服务提供者(discovery)

    1 创建父项目 以前文所述,以spring boot 2.1.7.RELEASE为基,spring cloud版本为Greenwich.SR2,spring cloud alibaba版本为2.1.0 ...

  5. python安装pymssql等包时出现microsoft visual c++ 14.0 is required问题无需下载visualcppbuildtools的解决办法

    如题,在练习python安装一些包时,出现了microsoft visual c++ 14.0 is required问题.网上有很多资料:一是下载对应的.whl文件,然后pip install安装: ...

  6. django 用户与权限管理

    django中使用content_type表进行存储app与model的关系.在permission表中设立了name(权限的名字,中英文均可)content_type_id(与content_typ ...

  7. Hystrix集群及集群监控turbine

    Hystrix集群及监控turbine 前面Dashboard演示的仅仅是单机服务监控,实际项目基本都是集群,所以这里集群监控用的是turbine. turbine是基于Dashboard的. 先搞个 ...

  8. sudo go 找不到命令

    我们使用 sudo 时,使用的配置文件是 /etc/sudoers. 解决配置 /etc/sudoers 文件中的 Defaults secure_path 这一项.将 $GOROOT/bin 目录加 ...

  9. 简单的权限管理php

    转发自https://www.cnblogs.com/shenzikun1314/p/6604867.html#4262295 首先,要明白的基础理论是用户,角色,权限之间的关系是一对多,还是多对多. ...

  10. Flask 教程 第十四章:Ajax

    本文翻译自The Flask Mega-Tutorial Part XIV: Ajax 这是Flask Mega-Tutorial系列的第十四部分,我将使用Microsoft翻译服务和少许JavaSc ...