本文源码: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. 非线性函数的最小二乘拟合及在Jupyter notebook中输入公式 [原创]

    突然有个想法,能否通过学习一阶RC电路的阶跃响应得到RC电路的结构特征——时间常数τ(即R*C).回答无疑是肯定的,但问题是怎样通过最小二乘法.正规方程,以更多的采样点数来降低信号采集噪声对τ估计值的 ...

  2. Ubuntu修改时间

    Ubuntu修改时区和更新时间 先查看当前系统时间 date -R 结果时区是:+0000 我需要的是东八区,这儿显示不是,所以需要设置一个时区 运行 tzselect 在这里我们选择亚洲 Asia, ...

  3. 【译】在React中实现条件渲染的7种方法

    原文地址:https://scotch.io/tutorials/7-ways-to-implement-conditional-rendering-in-react-applications 借助R ...

  4. 常见的web安全问题总结

    we安全对于web前端从事人员也是一个特别重要的一个知识点,也是面试的时候,面试官经常问的安全前端问题.掌握一些web安全知识,提供安全防范意识,今天就会从几个方面说起前端web攻击和防御的常用手段 ...

  5. 区块链学习——HyperLedger-Fabric v1.0环境搭建详细教程

    相对与v0.6版本来说,1.0版本改变较大,此处不多说,只是将小白自己搭建1.0环境的过程分享给大家.希望对大家能有所帮助! 这一篇可能对前面的环境搭建会写的有些粗略,如有疑问,可阅读上一篇V0.6版 ...

  6. java基础集合简介List/Vector(三)上

    集合特点: 1:对象封装数据,对象多了也需要存储.集合用于存储对象. 2:集合是可变长度的. 集合和数组的区别: 1:数组是固定长度的:集合可变长度的. 2:数组可以存储基本数据类型,也可以存储引用数 ...

  7. 【CHRIS RICHARDSON 微服务系列】事件驱动的数据管理-5

    编者的话 |本文来自 Nginx 官方博客,是「Chris Richardson 微服务」系列的第五篇文章.第一篇文章介绍了微服务架构模式,并且讨论了使用微服务的优缺点:第二和第三篇描述了微服务架构模 ...

  8. 【GZOI 2019】特技飞行

    Problem Description 公元 \(9012\) 年,Z 市的航空基地计划举行一场特技飞行表演.表演的场地可以看作一个二维平面直角坐标系,其中横坐标代表着水平位置,纵坐标代表着飞行高度. ...

  9. TP5 try{}catch{}异常捕获不到 解决办法

    问题:TP5用下面的方法, 想要获取抛出的异常捕获不到…… 错误的写法: try{ …… } catch (Exception $e) { echo $e->getMessage(); } 正确 ...

  10. 不看好 git ,也看不懂为什么那么多人去使用 git

    上来就亮明观点,符合我的性格.呵呵呵. 为什么不看好 git 呢? 首先,我们来看看 git 产生的背景. git 是 Linus 开发的,最初的目的,是为了管理 Linux 系统的源代码.这是一个分 ...