Java设计模式-工厂模式(1)简单工厂模式
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)简单工厂模式相关推荐
- Java设计模式(二)简单工厂模式—设计模式六大原则
文章目录 设计模式六大原则 1. 开闭原则 2. 里氏代换原则 3. 依赖倒转原则 4. 接口隔离原则 5. 迪米特法则(最少知道原则) 6. 合成复用原则 工厂设计模式 什么是工厂模式 工厂模式的好 ...
- Java设计模式(十二) 策略模式
策略模式介绍 策略模式定义 策略模式(Strategy Pattern),将各种算法封装到具体的类中,作为一个抽象策略类的子类,使得它们可以互换.客户端可以自行决定使用哪种算法. 策略模式类图 策略模 ...
- JAVA设计模式——工厂模式【简单工厂模式、工厂方法模式、抽象工厂模式】
目录 简单工厂模式 传统方式 简单工厂模式 静态工厂模式 工厂方法模式 抽象工厂模式 工厂模式JDK-Calendar源码分析 工厂模式小结 简单工厂模式 看一个具体的需求 看一个披萨的项目:要便 ...
- Java设计模式之(工厂模式)--简单工厂模式--工厂方法模式--抽象工厂模式
工厂模式: 工厂模式可以分为三类: 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory) 简单工厂模 ...
- 设计模式C#描述之——简单工厂模式、抽象工厂模式、单例与多例模式
设计模式C#描述之--简单工厂模式 前 言:设计模式是软件开发领域的精髓之一.学好设计模式是目前每一个开发人员的必修课.目前关于设计模式的书很多,其中比较好的有GOF那本的中译本,但并 不很适合初学者 ...
- 设计模式(1)--简单工厂模式、策略模式
设计模式(1)--简单工厂模式.策略模式 1. 简单工厂模式 在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static ...
- Java设计模式(5):工厂模式
5,工厂模式(Factory) 工厂模式在逻辑上可以分为三种:简单工厂模式,工厂方法模式和抽象工厂模式.其中简单工厂模式不属于23种设计模式. 从实际中理解三种工厂模式,大致可以理解为工厂发展的三个阶 ...
- 2.5万字详解23种设计模式—创建型模式(简单工厂、工厂方法、抽象工厂、单例-多线程安全详解、建造者、原型)的详细解读、UML类图
本文简述了各大设计模式,并通过UML和代码详细说明.本文大约共 2.5W 字,建议收藏.下方是本文的目录: 一.设计模式的认识 二.设计模式的分类 根据其目的 根据范围 三.设计模式的优点 四.设计模 ...
- 设计模式——工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)
声明: 本博客参考C语言中文网:C语言中文网连接 主要记录学习以下内容: 一.简单工厂模式 二.工厂方法模式 三.抽象工厂模式 每个大要点都主要包括以下两部分内容: (1)基本概念和模型结构(包括一些 ...
- 《设计模式入门》 1.简单工厂模式
简单工厂模式(Simple Factory Pattern)不属于GoF 23种设计模式,我们通常将它作为学习其他工厂模式的入门.是由一个工厂对象决定创建出哪一种产品类的实例.简单来说就是我们抽取一个 ...
最新文章
- “大数据系统软件国家工程实验室”建设项目通过验收
- mysql下载之后找不见_Win7系统中安装mysql后找不到服务或出现找不到指定文件怎么办?...
- 惠普微型计算机怎么样,垃圾佬的养成①日记之惠普HP 400G3 DM迷你小主机入手日记...
- 人工智能:看似很美,却暗藏泡沫
- jsbridge实现及原理_JSBridge 实现原理解析
- k8s源码Client-go中Reflector解析
- Error response from daemon:###unable to delete ### (must be forced) - image is being used by stopped
- 腾讯阿里达成“共识”!马化腾称“用链量”“用云量”或成数字时代的重要指标...
- 为什么说 Julia 更优于 Python?
- 中国区块链开发者的热血时代来临!
- 彻底掌握Quartus——基础篇
- python元组定义_python定义元组
- 树莓派如何接硬盘_树莓派之挂载移动硬盘
- 这是50年前的一本关于30年前软件开发经验的书——《人月神话》读书笔记
- 移植st官方usb-hid程序出现babble detected错误
- Java实现细菌觅食算法_细菌觅食算法的matlab代码
- 键盘录入一个字符串,统计该字符串中的大写字母、小写字母、数字字符和其他字符分别有多少个 例如,键盘录入abcABCD12345!@#$%,输出结果为:小写字母有3个,大写字母有4个,数字字符有5个,
- jQuery 三种点击事件写法
- Linux线程同步与Windows线程同步
- 【python 题练】
热门文章
- SAP ABAP OLE 输出数据到 Excel 无法自动保存的解决
- ABAP性能优化之使用 “for all entries”
- 100小时学会sap-财务篇fico总结介绍篇
- OO实现ALV TABLE 四:ALV的显示样式
- 大商超的2020:转型、收紧、试新
- java中为什么要用json_Java中使用JSON
- 五子棋开发案列c语言,C语言案例:控制台版本的五子棋游戏【代码】
- php获得指定位置中间的数据库,PHP 在5.1.* 和5.2.*之间 PDO数据库操作中的不同之处小结...
- iis 不是 php,iis是不是默认支持php
- Jmeter---jason提取器处理上下游传参(四)