详谈 Java工厂 ---工厂方法模式
1.前言
有个场景,消费者需要付钱,有可能是使用支付宝、微信、银行卡,那么该怎么选择呢?
是不是想到了使用用if else判断?还是使用switch?
一个地方这样写还好,如果有很多这样的业务,难道都写一遍?我不想重复轮子,因此可以将他们都封装好,可以使用工厂模式将他们封装。
什么是工厂模式?
就是为了尽可能将代码的耦合度降低而产生的设计模式。
这篇随笔讲解 工厂方法模式 的思路和具体操作。
2.总结
(1)工厂方法模式与静态工厂十分相似,甚至说思路基本一样,只是通过传入参数来选择不同的操作而已。
(2)是在静态工厂的基础上改进的模式。
(3)消费者只需要将关键词传给工厂,由工厂决定返回的内容。
(4)优点:将相似的业务集成在一起,使用基本一样的操作完成不同的业务。
(5)缺点:如果需要修改业务,需要修改工厂内容,耦合度太高了。
3.操作
(1)目录结构

(2)建一个食物接口【规定了允许对食物的操作方法】

package com.example.javabaisc.factory.staticfactory.origin;
public interface Food {
public void getFood();
}
(3)两个食物接口的实现类【分别是苹果和面条】

package com.example.javabaisc.factory.staticfactory.origin;
public class Apple implements Food {
@Override
public void getFood() {
System.out.println("apple");
}
}

package com.example.javabaisc.factory.staticfactory.origin;
public class Noodles implements Food {
@Override
public void getFood() {
System.out.println("Noodles");
}
}
(4)工厂类【决定生产什么食物】

package com.example.javabaisc.factory.staticfactory.factory; import com.example.javabaisc.factory.staticfactory.origin.Apple;
import com.example.javabaisc.factory.staticfactory.origin.Food;
import com.example.javabaisc.factory.staticfactory.origin.Noodles; public class FoodFactory {
public static String FF_Apple = "apple";
public static String FF_Noodles = "noodles"; public static Food getFood(String key) {
if (key.equals(FF_Apple)) {
return new Apple();
} else if (key.equals(FF_Noodles)) {
return new Noodles();
} else {
System.out.println("没有这种食物");
return null;
} } }
(5)测试类

package com.example.javabaisc.factory.staticfactory; import com.example.javabaisc.factory.staticfactory.factory.FoodFactory;
import com.example.javabaisc.factory.staticfactory.origin.Food;
import org.junit.jupiter.api.Test; public class StFTest {
@Test
public void t(){ //从工厂获取苹果
Food food = FoodFactory.getFood(FoodFactory.FF_Apple);
if (food != null){
food.getFood();
}
//从工厂获取面条
Food food2 = FoodFactory.getFood(FoodFactory.FF_Noodles);
if (food2 != null){
food2.getFood();
} } }
(6)运行,打印结果

详谈 Java工厂 ---工厂方法模式的更多相关文章
- Java设计模式の模版方法模式
概述 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的 ...
- 设计模式(java)--模版方法模式之任务分配
转自:http://blog.csdn.net/zhengzhb/article/details/7405608 定义:定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构 ...
- Java设计模式(二) 工厂方法模式
本文介绍了工厂方法模式的概念,优缺点,实现方式,UML类图,并介绍了工厂方法(未)遵循的OOP原则 原创文章.同步自作者个人博客 http://www.jasongj.com/design_patte ...
- JAVA设计模式--工厂方法模式
工厂方法设计模式 抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关.是具体工厂角色必须实现的接口或者必须继承的父类.在java中它由抽象类或者接口来实现.具体工厂角色:它含有和具体业务逻辑有关 ...
- Java设计模式3:工厂方法模式
工厂方法模式 工厂方法模式是类的创建模式.工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建工厂推迟到子类中. 工厂方法模式 工厂方法模式是对简单工厂模式进一步抽象的结果. 假如是不使用反 ...
- java设计模式(二)---工厂方法模式
2普通工厂方法模式 就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建. 2.1创建接口 /** * 发送接口 * Created by mrf on 2016/2/25. */ public ...
- java 23 - 1 设计模式之工厂方法模式
转载: JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)
- JAVA设计模式之工厂方法模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述工厂方法模式的: 工厂方法模式是类的创建模式,又叫做虚拟构造子(Virtual Constructor)模式或者多态性工厂(Polymor ...
- [改善Java代码]用枚举实现工厂方法模式更简洁
工厂方法模式(Factory Method Patter)是"创建对象的接口",让子类决定实例化哪一个类,并使一个类的实例化延迟到其子类.工厂方法模式在我们的开发工作中,经常会用到 ...
随机推荐
- 【转】在本地运行leetcode核心代码
https://zhuanlan.zhihu.com/p/342993772 在调用solution之前,要加一句 Solution solution; solution.函数名(输入变量); 以下是 ...
- 【C/C++】two pointers/归并排序/原理/理解/实现/算法笔记4.6
1.two pointers 思路:对序列进行扫描的时候,根据序列本身的特性用两个下标i和j对序列进行扫描,从而降低算法复杂度. ·例1 在递增序列中找a + b = M while (i<j) ...
- 【Office】【Excel】将多个工作薄合为一个工作薄
前提:工作薄首行不能有合并的单元格 准备工作:将要合并的工作簿放在一个文件夹里面,文件夹中不能有乱七八糟的东西,只能有你要合并的工作薄 操作步骤:在此文件夹下创建Excel表格并打开,按下alt+F1 ...
- Java中方法和类的深入分析
1.构造方法不能被继承.也就是说子类里没有父类的构造方法. Java重载根据的是实参和方法形参之间的匹配.自动类型转换也在重载版本的判断中起到了作用.重载的价值在于允许使用通用名称访问相关的方法. ...
- 第46篇-signature_handler与result_handler
在之前介绍为native方法设置解释执行的入口时介绍过,当Method::native_function为空时会调用InterpreterRuntime::prepare_native_call()函 ...
- 小迪安全 Web安全 基础入门 - 第九天 信息打点 - CDN绕过篇&漏洞回链&接口探针&全网扫描&反向邮件
一. CDN知识-工作原理及阻碍 (一)工作原理 1.概述:CDN的全称是Content Delivery Network,即内容分发网络.CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地 ...
- java 多线程:线程通信-等待通知机制wait和notify方法;(同步代码块synchronized和while循环相互嵌套的差异);管道通信:PipedInputStream;PipedOutputStream;PipedWriter; PipedReader
1.等待通知机制: 等待通知机制的原理和厨师与服务员的关系很相似: 1,厨师做完一道菜的时间不确定,所以厨师将菜品放到"菜品传递台"上的时间不确定 2,服务员什么时候可以取到菜,必 ...
- Python第二周 str的方法
str.start #!/usr/bin/env python # Author:Zhangmingda while True: cmd = input('输入字符:')#.strip() print ...
- redis集群搭建,使用注意
https://www.cnblogs.com/vieta/p/11192137.html https://blog.csdn.net/qq_42815754/article/details/8291 ...
- 磁盘分区级文件系统丢失找回 testdisk
故障修复步骤: 1. 检查磁盘分区级文件系统确实不在: 2. 云主机内部下载testdisk工具修复 yum install testdisk -y 3. 执行命令testdisk /dev/vdc进 ...