Java设计模式-工厂模式(1)简单工厂模式

  • 一、前言
      • 1)例子
      • 2)类图关系
      • 3)代码实现
    • 二、简单工厂模式
      • 2.1、概述:
      • 2.2、类图关系:
      • 2.3、代码修改:
      • 2.4、优缺点
      • 2.5、扩展-简单静态工厂
      • 2.6、扩展-简单工厂+配置文件解除耦合
    • 三、结语

Java设计模式-工厂模式(1)简单工厂模式)

一、前言

我们先别急着想工厂模式是什么样的啊

先看看下面这个例子啊,怎么设计,如何写,才能更好。

一步一步引出Java工厂模式。

1)例子

需求:设计一个咖啡店点餐系统。

设计一个咖啡类(Coffee),并定义其两个子类(美式咖啡【AmericanCoffee】和拿铁咖啡【LatteCoffee】);再设计一个咖啡店类(CoffeeStore),咖啡店具有点咖啡的功能。

代码是比较简单的,我这是采取一步一步引入的,如果不喜欢,可以直接看下文。

我们先用曾经的方式来设计和进行代码的编写。

2)类图关系

3)代码实现

我们先用以前的方式来实现一遍哈。

1、先写好Coffee这个抽象类

public abstract class Coffee {public abstract void addMilk();public abstract void addSugar();public abstract String getName();
}

2、再写好美式咖啡和拿铁咖啡继承Coffee抽象类

public class AmericanCoffee extends Coffee {@Overridepublic void addMilk() { System.out.println("给咖啡加奶"); }@Overridepublic void addSugar() { System.out.println("给咖啡加糖"); }@Overridepublic String getName() { return "美式咖啡"; }
}
public class LatteCoffee extends Coffee {@Overridepublic void addMilk() { System.out.println("给咖啡加奶"); }@Overridepublic void addSugar() {  System.out.println("给咖啡加糖"); }@Overridepublic String getName() { return "拿铁咖啡"; }
}

3、咖啡店

public class CoffeeStore {public Coffee createCoffee(String type){Coffee coffee = null;if("americano".equals(type)) {coffee = new AmericanCoffee();} else if("latte".equals(type)) {coffee = new LatteCoffee();}coffee.addMilk();coffee.addSugar();return coffee;}
}

4、写个客户端来测试点咖啡哈

public class Client {public static void main(String[] args) {CoffeeStore coffeeStore = new CoffeeStore();Coffee coffee = coffeeStore.createCoffee("americano");System.out.println(coffee.getName());/*** 输出:* 给咖啡加奶* 给咖啡加糖* 美式咖啡*/}
}

其实乍一看没啥问题,但是如果我这个需要增加几种咖啡,你说该如何才合适勒?

是不是需要修改CoffeeStore的代码。又如果要开设美团外卖点单呢?又如何改呢?

在java中,万物皆对象。

如果创建的时候直接new该对象,就会对该对象耦合严重,假如我们要更换对象,所有new对象的地方都需要修改一遍,这显然违背了软件设计的开闭原则。(而且这种重复工作简直想死)

如果我们使用工厂来生产对象,我们就只和工厂打交道就可以了,彻底和对象解耦,如果要更换对象,直接在工厂里更换该对象即可,达到了与对象解耦的目的;所以说,工厂模式最大的优点就是:解耦

接下来就出现了简单工厂模式(简单工厂模式并非23种经典模式之内,更像是一种编程习惯吧)。

Java设计模式-工厂模式(1)简单工厂模式相关推荐

  1. Java设计模式(二)简单工厂模式—设计模式六大原则

    文章目录 设计模式六大原则 1. 开闭原则 2. 里氏代换原则 3. 依赖倒转原则 4. 接口隔离原则 5. 迪米特法则(最少知道原则) 6. 合成复用原则 工厂设计模式 什么是工厂模式 工厂模式的好 ...

  2. Java设计模式(十二) 策略模式

    策略模式介绍 策略模式定义 策略模式(Strategy Pattern),将各种算法封装到具体的类中,作为一个抽象策略类的子类,使得它们可以互换.客户端可以自行决定使用哪种算法. 策略模式类图 策略模 ...

  3. JAVA设计模式——工厂模式【简单工厂模式、工厂方法模式、抽象工厂模式】

    目录 简单工厂模式 传统方式 简单工厂模式 静态工厂模式 工厂方法模式 抽象工厂模式 工厂模式JDK-Calendar源码分析 工厂模式小结 简单工厂模式   看一个具体的需求 看一个披萨的项目:要便 ...

  4. Java设计模式之(工厂模式)--简单工厂模式--工厂方法模式--抽象工厂模式

    工厂模式: 工厂模式可以分为三类: 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory) 简单工厂模 ...

  5. 设计模式C#描述之——简单工厂模式、抽象工厂模式、单例与多例模式

    设计模式C#描述之--简单工厂模式 前 言:设计模式是软件开发领域的精髓之一.学好设计模式是目前每一个开发人员的必修课.目前关于设计模式的书很多,其中比较好的有GOF那本的中译本,但并 不很适合初学者 ...

  6. 设计模式(1)--简单工厂模式、策略模式

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

  7. Java设计模式(5):工厂模式

    5,工厂模式(Factory) 工厂模式在逻辑上可以分为三种:简单工厂模式,工厂方法模式和抽象工厂模式.其中简单工厂模式不属于23种设计模式. 从实际中理解三种工厂模式,大致可以理解为工厂发展的三个阶 ...

  8. 2.5万字详解23种设计模式—创建型模式(简单工厂、工厂方法、抽象工厂、单例-多线程安全详解、建造者、原型)的详细解读、UML类图

    本文简述了各大设计模式,并通过UML和代码详细说明.本文大约共 2.5W 字,建议收藏.下方是本文的目录: 一.设计模式的认识 二.设计模式的分类 根据其目的 根据范围 三.设计模式的优点 四.设计模 ...

  9. 设计模式——工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)

    声明: 本博客参考C语言中文网:C语言中文网连接 主要记录学习以下内容: 一.简单工厂模式 二.工厂方法模式 三.抽象工厂模式 每个大要点都主要包括以下两部分内容: (1)基本概念和模型结构(包括一些 ...

  10. 《设计模式入门》 1.简单工厂模式

    简单工厂模式(Simple Factory Pattern)不属于GoF 23种设计模式,我们通常将它作为学习其他工厂模式的入门.是由一个工厂对象决定创建出哪一种产品类的实例.简单来说就是我们抽取一个 ...

最新文章

  1. “大数据系统软件国家工程实验室”建设项目通过验收
  2. mysql下载之后找不见_Win7系统中安装mysql后找不到服务或出现找不到指定文件怎么办?...
  3. 惠普微型计算机怎么样,垃圾佬的养成①日记之惠普HP 400G3 DM迷你小主机入手日记...
  4. 人工智能:看似很美,却暗藏泡沫
  5. jsbridge实现及原理_JSBridge 实现原理解析
  6. k8s源码Client-go中Reflector解析
  7. Error response from daemon:###unable to delete ### (must be forced) - image is being used by stopped
  8. 腾讯阿里达成“共识”!马化腾称“用链量”“用云量”或成数字时代的重要指标...
  9. 为什么说 Julia 更优于 Python?
  10. 中国区块链开发者的热血时代来临!
  11. 彻底掌握Quartus——基础篇
  12. python元组定义_python定义元组
  13. 树莓派如何接硬盘_树莓派之挂载移动硬盘
  14. 这是50年前的一本关于30年前软件开发经验的书——《人月神话》读书笔记
  15. 移植st官方usb-hid程序出现babble detected错误
  16. Java实现细菌觅食算法_细菌觅食算法的matlab代码
  17. 键盘录入一个字符串,统计该字符串中的大写字母、小写字母、数字字符和其他字符分别有多少个 例如,键盘录入abcABCD12345!@#$%,输出结果为:小写字母有3个,大写字母有4个,数字字符有5个,
  18. jQuery 三种点击事件写法
  19. Linux线程同步与Windows线程同步
  20. 【python 题练】

热门文章

  1. SAP ABAP OLE 输出数据到 Excel 无法自动保存的解决
  2. ABAP性能优化之使用 “for all entries”
  3. 100小时学会sap-财务篇fico总结介绍篇
  4. OO实现ALV TABLE 四:ALV的显示样式
  5. 大商超的2020:转型、收紧、试新
  6. java中为什么要用json_Java中使用JSON
  7. 五子棋开发案列c语言,C语言案例:控制台版本的五子棋游戏【代码】
  8. php获得指定位置中间的数据库,PHP 在5.1.* 和5.2.*之间 PDO数据库操作中的不同之处小结...
  9. iis 不是 php,iis是不是默认支持php
  10. Jmeter---jason提取器处理上下游传参(四)