设计模式 — 简单工厂模式(Simple Factory)
定义:定义一个工厂类,它可以根据参数的不同返回不同类型的实例,被创建的实例通常有公共的父类。
模式类型:创建型模型
Factory(工厂角色):即工厂类,负责实现创建所有产品实例的内部逻辑;工厂类可以直接被外界调用,创建所需的产品对象;在工厂类中提供了静态的工厂方法FactoryMethod(),它的返回类型为抽象产品Product。
Product(抽象产品角色):它是工厂类所创建的所有对象的父类,封装了各种产品对象的公共方法。提高了系统的灵活性,使得工厂类只需定义一个通用的工厂方法,因为所有创建的具体产品对象都是其子类对象。
ConcreteProduct(具体产品角色):所有被创建的对象都充当某个具体类的实例。每一个具体产品角色都继承了抽象产品角色,需要实现在抽象产品中声明的抽象方法。
案例:pizza生产简单工厂模式
1 /** 2 * @author EASON 3 * @date 2017.1.7 13:23 4 * @function 工厂模式 5 */ 6 package com.nju; 7 8 import java.io.BufferedReader; 9 import java.io.IOException; 10 import java.io.InputStreamReader; 11 12 public class Test { 13 public static void main(String[] args) { 14 PizzaStore ps = new PizzaStore(); 15 ps.orderPizza(); 16 } 17 } 18 19 //抽象产品类 20 interface Pizza{ 21 public void prepare(); 22 public void bake(); 23 public void cut(); 24 public void packaged(); 25 } 26 27 //具体产品类-奶酪披萨 28 class CheesePizza implements Pizza{ 29 //具体产品类需要实现抽象产品类中的方法 30 public void prepare() { 31 System.out.println("奶酪披萨开始制作..."); 32 } 33 34 public void bake() { 35 System.out.println("奶酪披萨开始烘焙..."); 36 } 37 38 public void cut() { 39 System.out.println("奶酪披萨开始切块..."); 40 } 41 42 public void packaged() { 43 System.out.println("奶酪披萨包装完毕..."); 44 } 45 46 } 47 48 //具体产品类-洋葱披萨 49 class PepperoniPizza implements Pizza{ 50 51 public void prepare() { 52 System.out.println("洋葱披萨开始制作..."); 53 } 54 55 public void bake() { 56 System.out.println("洋葱披萨开始烘焙..."); 57 } 58 59 public void cut() { 60 System.out.println("洋葱披萨开始切块..."); 61 } 62 63 public void packaged() { 64 System.out.println("洋葱披萨包装完毕..."); 65 } 66 67 } 68 69 //Pizza工厂类 70 class PizzaFactory{ 71 public Pizza getPizza(String pizzaType){ 72 switch(pizzaType){ 73 case("cheesePizza"): 74 return new CheesePizza(); 75 case("pepperonPizza"): 76 return new PepperoniPizza(); 77 default: 78 return null; 79 } 80 } 81 } 82 83 //Pizza商店类 84 class PizzaStore{ 85 public void orderPizza(){ 86 BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); 87 PizzaFactory pf = new PizzaFactory(); 88 System.out.println("欢迎光临!"); 89 System.out.println("请输入你想要购买的Pizza:"); 90 try { 91 String pizzaType = bf.readLine(); 92 Pizza pizza = pf.getPizza(pizzaType); 93 pizza.prepare(); 94 pizza.bake(); 95 pizza.cut(); 96 pizza.packaged(); 97 System.out.println("欢迎下次光临!"); 98 } catch (IOException e) { 99 e.printStackTrace(); 100 } 101 } 102 }
使用简单工厂模式的好处,可以把复杂的逻辑判断代码从PizzaStore中分离出来,即便需要修改判断逻辑,也不会影响PizzaStore,符合OCP。
转载于:https://www.cnblogs.com/huiAlex/p/6259446.html
设计模式 — 简单工厂模式(Simple Factory)相关推荐
- Java设计模式之简单工厂模式(Simple Factory)
[Java与模式]简单工厂模式(Simple Factory---吴义) 首先说明,Java与模式一系列的文章均是参考阎宏博士的<Java与模式>一书,加上自身的一些体会的探索,产生如下文 ...
- Net设计模式之简单工厂模式(Simple Factory Pattern)
一.简单工厂模式简介(Bref Introduction) 简单工厂模式(Simple Factory Pattern)的优点是,工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实 ...
- 简单工厂模式-Simple Factory Pattern 工厂三兄弟之简单工厂模式(四):图表库解决方案的改进,简单工厂模式的简化,简单工厂模式总结
4 方案的改进 Sunny软件公司开发人员发现在创建具体Chart对象时,每更换一个Chart对象都需要修改客户端代码中静态工厂方法的参数,客户端代码将要重新编译,这对于客户端而言,违反了" ...
- 设计模式的征途—2.简单工厂(Simple Factory)模式
工厂模式是最常用的一种创建型模式,通常所说的工厂模式一般是指工厂方法模式.本篇是是工厂方法模式的"小弟",我们可以将其理解为工厂方法模式的预备知识,它不属于GoF 23种设计模式, ...
- 简单工厂(Simple Factory)模式
简单工厂(Simple Factory)模式 Simple Factory模式根据提供给它的数据,返回几个可能类中的一个类的实例.通常它返回的类都有一个公共的父类和公共的方法. Simple Fact ...
- 设计模式(2)——创建型——工厂相关:简单工厂(Simple factory),工厂方法(Factory method),抽象工厂(Abstract factory)
概要 这里试图描述23个设计模式中的两个工厂(Factory)相关的设计模式:工厂方法(Factorymethod),抽象工厂(Abstract factory). 注意点: 这两个都属于创建型设计模 ...
- 设计模式之工厂模式(Factory)(3)
在面向对象编程中,最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下,new操作符直接生成对象会带来一些问题.举例来说,许多类型对象的创造需要一系列的 ...
- JavaScript设计模式--简单工厂模式例子---XHR工厂
JavaScript设计模式--简单工厂模式例子---XHR工厂 第一步,Ajax操作接口(目的是起一个接口检测作用) (1)引入接口文件 //定义一个静态方法来实现接口与实现类的直接检验 //静态方 ...
- 三角形圆形创建与擦除java_设计模式---------------简单工厂模式
设计模式---------------简单工厂模式 一.题目(Question) 使用简单工厂模式设计一个可以创建不同几何形状(如圆形.方形和三角形等)的绘图工具,每个几何图形都要有绘制draw()和 ...
- 设计模式—简单工厂模式
前言 简单工厂模式是一种比较容易理解的设计模式 简单工厂模式介绍 在设计模式中,简单工厂模式可以理解为负责生产对象的一个类,当使用new 关键字创建一个对象时,此时该类就依赖于这个对象,也就是他们间的 ...
最新文章
- SpringCloud Alibaba 微服务架构版本说明
- 【C#串口编程计划】C#串口协议解析 -- 二进制数据
- 从易于扩展扩展的角度来设计FizzBuzzWhizz
- 一文搞懂 Prometheus 的直方图
- 如何判断两个平面相交_初一数学下册预习第五章 相交线与平行线上
- 【项目实战课】微信小程序图像识别模型前后端部署实战
- Create QR Code
- 俞栋谈腾讯AI Lab进展;腾讯AI加速器第二期开始招募
- React Native通信机制详解
- [开源] .Net ORM FreeSql 1.10.0 稳步向前
- mysql集群怎么实现状态机_分布式中的状态机
- python网站用什么数据库_使用python读取mysql数据库并进行数据的操作
- 6.4 Ext.core.DomQuery 单实例查询选择器,通过正则表达式查找DOM或者HTM
- 程序员常用的计算机编程语言介绍
- 查看kms服务器信息,查看kms服务器地址
- Unity 中英文互译插件
- matlab设计译码器,基于Matlab编译码器的仿真与设计
- autojs自动添加QQ群成员好友脚本,QQ爆粉源码
- PS之制作圆角的白色边框图和白色底图
- 服务器突然断电文件系统损坏,电脑突然断电造成系统文件损坏该如何修复?(高级篇)...
热门文章
- 如何在 JIRA 中创建自己的仪表板(Dashboard)
- 物料-贴片电容-标签识别
- 六度分离(hdu1869,floyd最短路)
- 计算机中时序信号的作用是什么,时序信号
- vue的keep-alive的正确用法
- R语言学习| 马氏距离mahanobis函数
- 新浪实时股票数据接口http://hq.sinajs.cn/list=code
- 通过亚马逊云科技实现基于 Restful API 的 CloudFront Distribution 复制/克隆功能
- no moudle named dlib
- 蚁群算法c语言实现加注释,蚁群算法代码实现