定义:定义一个工厂类,它可以根据参数的不同返回不同类型的实例,被创建的实例通常有公共的父类。

模式类型:创建型模型

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)相关推荐

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

    [Java与模式]简单工厂模式(Simple Factory---吴义) 首先说明,Java与模式一系列的文章均是参考阎宏博士的<Java与模式>一书,加上自身的一些体会的探索,产生如下文 ...

  2. Net设计模式之简单工厂模式(Simple Factory Pattern)

    一.简单工厂模式简介(Bref Introduction)        简单工厂模式(Simple Factory Pattern)的优点是,工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实 ...

  3. 简单工厂模式-Simple Factory Pattern 工厂三兄弟之简单工厂模式(四):图表库解决方案的改进,简单工厂模式的简化,简单工厂模式总结

    4 方案的改进 Sunny软件公司开发人员发现在创建具体Chart对象时,每更换一个Chart对象都需要修改客户端代码中静态工厂方法的参数,客户端代码将要重新编译,这对于客户端而言,违反了" ...

  4. 设计模式的征途—2.简单工厂(Simple Factory)模式

    工厂模式是最常用的一种创建型模式,通常所说的工厂模式一般是指工厂方法模式.本篇是是工厂方法模式的"小弟",我们可以将其理解为工厂方法模式的预备知识,它不属于GoF 23种设计模式, ...

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

    简单工厂(Simple Factory)模式 Simple Factory模式根据提供给它的数据,返回几个可能类中的一个类的实例.通常它返回的类都有一个公共的父类和公共的方法. Simple Fact ...

  6. 设计模式(2)——创建型——工厂相关:简单工厂(Simple factory),工厂方法(Factory method),抽象工厂(Abstract factory)

    概要 这里试图描述23个设计模式中的两个工厂(Factory)相关的设计模式:工厂方法(Factorymethod),抽象工厂(Abstract factory). 注意点: 这两个都属于创建型设计模 ...

  7. 设计模式之工厂模式(Factory)(3)

    在面向对象编程中,最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下,new操作符直接生成对象会带来一些问题.举例来说,许多类型对象的创造需要一系列的 ...

  8. JavaScript设计模式--简单工厂模式例子---XHR工厂

    JavaScript设计模式--简单工厂模式例子---XHR工厂 第一步,Ajax操作接口(目的是起一个接口检测作用) (1)引入接口文件 //定义一个静态方法来实现接口与实现类的直接检验 //静态方 ...

  9. 三角形圆形创建与擦除java_设计模式---------------简单工厂模式

    设计模式---------------简单工厂模式 一.题目(Question) 使用简单工厂模式设计一个可以创建不同几何形状(如圆形.方形和三角形等)的绘图工具,每个几何图形都要有绘制draw()和 ...

  10. 设计模式—简单工厂模式

    前言 简单工厂模式是一种比较容易理解的设计模式 简单工厂模式介绍 在设计模式中,简单工厂模式可以理解为负责生产对象的一个类,当使用new 关键字创建一个对象时,此时该类就依赖于这个对象,也就是他们间的 ...

最新文章

  1. SpringCloud Alibaba 微服务架构版本说明
  2. 【C#串口编程计划】C#串口协议解析 -- 二进制数据
  3. 从易于扩展扩展的角度来设计FizzBuzzWhizz
  4. 一文搞懂 Prometheus 的直方图
  5. 如何判断两个平面相交_初一数学下册预习第五章 相交线与平行线上
  6. 【项目实战课】微信小程序图像识别模型前后端部署实战
  7. Create QR Code
  8. 俞栋谈腾讯AI Lab进展;腾讯AI加速器第二期开始招募
  9. React Native通信机制详解
  10. [开源] .Net ORM FreeSql 1.10.0 稳步向前
  11. mysql集群怎么实现状态机_分布式中的状态机
  12. python网站用什么数据库_使用python读取mysql数据库并进行数据的操作
  13. 6.4 Ext.core.DomQuery 单实例查询选择器,通过正则表达式查找DOM或者HTM
  14. 程序员常用的计算机编程语言介绍
  15. 查看kms服务器信息,查看kms服务器地址
  16. Unity 中英文互译插件
  17. matlab设计译码器,基于Matlab编译码器的仿真与设计
  18. autojs自动添加QQ群成员好友脚本,QQ爆粉源码
  19. PS之制作圆角的白色边框图和白色底图
  20. 服务器突然断电文件系统损坏,电脑突然断电造成系统文件损坏该如何修复?(高级篇)...

热门文章

  1. 如何在 JIRA 中创建自己的仪表板(Dashboard)
  2. 物料-贴片电容-标签识别
  3. 六度分离(hdu1869,floyd最短路)
  4. 计算机中时序信号的作用是什么,时序信号
  5. vue的keep-alive的正确用法
  6. R语言学习| 马氏距离mahanobis函数
  7. 新浪实时股票数据接口http://hq.sinajs.cn/list=code
  8. 通过亚马逊云科技实现基于 Restful API 的 CloudFront Distribution 复制/克隆功能
  9. no moudle named dlib
  10. 蚁群算法c语言实现加注释,蚁群算法代码实现