java设计模式--[创建模式]--简单工厂[simple factory]

2023-11-15

一. 簡單工廠
    其實它不是一個設計模式,反而比較像是一種編程習慣,由于經常被使用,有些人把這個習慣誤認為是"工廠模式",在談論工廠模式前,先將簡單工廠熟悉一下;

 

二. 簡單工廠的UML類圖如下:



 

三.在此用一個事例說明簡單工廠的用法: 在一個酒店里可以做出多種名菜.完整示例代碼如下:

 

 1. 菜肴的加工過程

package creationalPattern.factory.simple;
/**
 * 名菜加工過程
 * @author Liyongbin
 * @date 2011-02-06
 */
public interface ICuisine {
	//原料採購
	public String purchase();
	//烹調加工
	public String processing();
	//成品銷售
	public String vendition();
}

 2. 川菜的做法

package creationalPattern.factory.simple;
/**
 * 川菜類
 * @author Liyongbin
 * @date 2011-02-06
 */
public class SichuanCuisine implements ICuisine{
	@Override
	public String purchase() {
		return "川菜原料採購";
	}
	
	@Override
	public String processing() {
		return "川菜烹調加工";
	}

	@Override
	public String vendition() {
		return "川菜成品銷售";
	}
}

    湘菜的做法:

package creationalPattern.factory.simple;
/**
 * 湘菜類
 * @author Liyongbin
 * @date 2011-02-06
 */
public class HunanCuisine implements ICuisine{

	@Override
	public String purchase() {
		return "湘菜原料採購";
	}
	
	@Override
	public String processing() {
		return "湘菜烹調加工";
	}

	@Override
	public String vendition() {
		return "湘菜成品銷售";
	}
}

   粵菜的做法:

package creationalPattern.factory.simple;
/**
 * 粵菜類
 * @author Liyongbin
 * @date 2011-02-06
 */
public class ContoneseCuisine implements ICuisine{

	@Override
	public String purchase() {
		return "粵菜原料採購";
	}

	@Override
	public String processing() {
		return "粵菜烹調加工";
	}

	@Override
	public String vendition() {
		return "粵菜成品銷售";
	}
}

 3.菜肴烹調工廠[簡單工廠]

package creationalPattern.factory.simple;

/**
 * 菜肴烹調工廠
 * @author Liyongbin
 * @date 2011-02-06
 */
public class CuisineFactory {
	//制作菜肴的方法
	public ICuisine cooking(String type){
		ICuisine cuisine=null;
		if (type.equalsIgnoreCase("Hunan")) {//湘菜
			cuisine=new HunanCuisine();
		} else if(type.equalsIgnoreCase("Sichuan")){//川菜
			cuisine=new SichuanCuisine();
		} else if(type.equalsIgnoreCase("Guangdong")){//粵菜
			cuisine=new ContoneseCuisine();	
		}
		return cuisine;
	}
}

 4. 酒店

package creationalPattern.factory.simple;

/**
 * 香格裡拉酒店
 * @author Administrator
 *
 */
public class ShangriLaHotel {
	CuisineFactory cf= new CuisineFactory();
	/**
	 * 訂單方法
	 * @param localCuisine預訂的地方菜
	 */
	public void order(String localCuisine){
		ICuisine cuisine=cf.cooking(localCuisine);
	        System.out.print(cuisine.purchase()+"|");
		System.out.print(cuisine.processing()+"|");
		System.out.println(cuisine.vendition());
	}
}

 5. 簡單工廠的測試

package creationalPattern.factory.simple;

public class SimpleFactoryTest {

	/**
	 *  簡單工廠測試方法
	 * @param args
	 */
	public static void main(String[] args) {
		ShangriLaHotel slh = new ShangriLaHotel();
		slh.order("Sichuan");
		slh.order("Hunan");
		slh.order("Guangdong");
	}
}

 6. 運行結果如下:

   

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java设计模式--[创建模式]--简单工厂[simple factory] 的相关文章

随机推荐

  • gimp中文版教程_GIMP中详细教程.pdf

    GIMP中详细教程 GIMP 实用系列教程 1文件的打开和存储 概述 打开GIMP软件其初始界面如下 左边是工具 工具箱中每选择一种工具后 通常在其下部会出 现一个与其相配的选项栏一起使用的 因此每选好一种工具 首先要 把选项栏中的有关选项
  • 蓝桥杯python青少年_让孩子参加蓝桥杯大赛好吗

    让孩子参加蓝桥杯大赛好吗 1 小学升初中备简历 该赛能帮孩子锦上添花 近年来 小学升初中的竞争越来越激烈 政策也年年在改变 许多地区的小学升初中甚至开始采取摇号和面试选拔学生 但不管政策怎么变 这其中的竞争力只会越来越大 优质生源决定学校核
  • 前端购物车,创建订单和支付流程

    前端购物车流程 用户在页面上将商品添加到购物车中 用户可以通过购物车页面查看添加的商品列表及其数量 并对其进行修改和删除 用户确认购物车中的商品无误后 点击 结算 按钮 用户填写收货地址 付款方式等相关信息 确认订单信息 系统生成订单并显示
  • flutter_blue + MethodChannel.invokeMethod + java.lang.NullPointerException

    友盟崩溃日志报了这样一个问题 说是扫描蓝牙设备回调时 MethodChannel 为空 java lang NullPointerException Attempt to invoke virtual method void io flut
  • Logrotate日志切分

    logrotate 程序是一个日志文件管理工具 用来把旧的日志文件更名或删除 并创建新的日志文件 我们把它叫做 转储 是个使日志轮替的程序 有了它就不用看着自己的日志体积一天天的变大 而可以根据你自己的需求来设定日志转储 这个工具对于像ng
  • discuz设置伪静态

    discuz设置伪静态 环境为 centos Apache mysql php 操作后台 点击提交 点击右上角的查看规则 复制一段到新建文件 htaccess中 注 WIN主机就另存为httpd ini Linux主机就另存为 htacce
  • python遍历文件夹下的所有子文件夹,并将指定的文件复制到指定目录

    python遍历文件夹下的所有子文件夹 并将指定的文件复制到指定目录 需求 复制单个文件夹 遍历所有子文件夹中的文件 并复制 代码封装 需求 在1文件夹中有1 2两个文件夹 将这两个文件夹中的文件复制到 after copy中 复制单个文件
  • Deathnote

    Deathnote 1 主机发现 arp scan l 2 扫描端口 nmap Pn sV P A 192 168 80 132 开放了80 22端口 3 访问80端口 修改host文件访问80端口时进行了跳转到deathnote vuln
  • Allegro 17.4设置中文界面

    一 Allegro 17 4 中文界面效果 二 Allegro 17 4 中文界面设置方法 2 1 需要打上此时 20210820 最新的S019的升级补丁 2 2 设置环境变量 变量名 intl enabled 变量值 1 要去除中文显示
  • LeetCode刷题-1

    数组 1 两数之和 题目描述 题目样例 Java方法 暴力枚举 思路及算法 代码 执行结果 复杂度 Java方法 哈希表 思路及算法 代码 执行结果 复杂度 题目描述 给定一个整数数组 nums 和一个整数目标值 target 请你在该数组
  • StarCraft开发:用肮脏的技巧解决难题

    http www csdn net article 2013 02 28 2814299 the starcraft path finding hack 摘要 在之前的文章中 Warcraft之父讲述了自己是如何以及为何重启StarCraf
  • Linux中的fork()函数

    Linux中的fork 函数 在Linux中 fork 函数是创建进程的基础 它是一个系统调用 用于创建一个新的进程作为当前进程的副本 新进程将拥有与原进程相同的代码 数据和堆栈 但是拥有不同的进程ID PID 并且它是原进程的子进程 函数
  • 【debug】(0, slice(None, None, None))‘ is an invalid key

    简单介绍 我获取了一个dataframe里的符合条件的多个index 想通过index对dataframe进行筛选 在筛选的时候反馈错误 原始代码为 input index df select df select item input in
  • 【word】如何设置交叉引用标注参考文献

    文章目录 1 定义参考文献编号格式 2 设置交叉引用 插入正文位置 3 修改连续多个参考文献的格式 4 更新正文标注 1 定义参考文献编号格式 开始 gt 编号 gt 定义新编号格式 2 设置交叉引用 插入正文位置 设置好固定的参考文献格式
  • 【vscode,python】pip成功的包却不能导入(import)问题

    第一次遇到这个问题 在网上找了些资料 网上的教程大致上都是需要去修改settings json这个文件 我问了我朋友 然后轻松地解决了这个问题 方法一 关掉编译软件重新打开即可解决问题 方法二 我认为造成这个问题的原因是在另一个新的路径上新
  • 真实GPS转腾讯/高德地图坐标系,百度地图与腾讯/高德地图坐标系转换

    1 获取真实坐标GPS wgs84转为gcj编码方式 positiontransform array manual 定义常量 var GPS PI 3 14159265358979324 x pi 3 14159265358979324 3
  • 对称矩阵的压缩存储、基于压缩矩阵的矩阵乘法

    def disp A 输出方阵A n len A for i in range n for j in range n print d A i j end print def compression A a 压缩矩阵A到a中 A是一个对称矩阵
  • 面试总结(五):搜索引擎

    问题导读 1 搜索引擎有哪些特点 优势 2 搜索引擎使用到哪些场景中 3 如何将原文档传给分次组件 4 如何将得到的词 Term 传给索引组件 Indexer 搜索引擎概述全文搜索就是对文本数据的一种搜索方式 文本数据的都多 可以分为顺序搜
  • 基于verilog语言的SPI协议实现

    前言 关于SPI协议的基础知识这里就不在叙述了 感兴趣的小伙伴可以自行百度 本文基于verilog语言 实现SPI的四种通信模式 封装成通用模块 更新时间 2023年7月11日 更新原因 之前的版本存在bug 通用性不够 模块端口如下 sp
  • java设计模式--[创建模式]--简单工厂[simple factory]

    一 簡單工廠 其實它不是一個設計模式 反而比較像是一種編程習慣 由于經常被使用 有些人把這個習慣誤認為是 工廠模式 在談論工廠模式前 先將簡單工廠熟悉一下 二 簡單工廠的UML類圖如下 三 在此用一個事例說明簡單工廠的用法 在一個酒店里可以