关于工厂方法模式的Java实现
作者:cainiao_23333 发布时间:2021-12-20 18:06:13
标签:工厂方法模式,Java,工厂模式
工厂方法模式简述
与简单工厂模式基本相同,只是工厂是一个抽象的,需要有具体的工厂去实现它,然后利用这个工厂生产产品,之所以出现这个模式是因为,简单工厂模式不符合OCP原则,添加新产品需要在已有的类中添加代码。
而使用工厂方法模式,需要新产品的时候,需要创建两个类,具体产品类实现产品接口,具体工厂类实现工厂接口,满足OCP原则,但是每增加一个产品,需要增加两个类,会产生大量的类。
创建步骤
步骤1
创建一个产品的接口
package com.ly.factory.factorymethod;
/**
* Car中run方法的抽象
* liyang 2020-07-10
*
* 也可以将其他共有的特性方法放入Car接口
* 具体的Audi等实现Car的相应方法
*/
public interface Car {
void run();
}
步骤2
创建产品的实体类
package com.ly.factory.factorymethod;
public class Audi implements Car {
@Override
public void run() {
System.out.println("奥迪飞驰中");
}
}
package com.ly.factory.factorymethod;
public class Benz implements Car {
@Override
public void run() {
System.out.println("奔驰飞驰中");
}
}
package com.ly.factory.factorymethod;
public class Byd implements Car {
@Override
public void run() {
System.out.println("比亚迪飞驰中");
}
}
步骤3
创建一个抽象工厂类
package com.ly.factory.factorymethod;
/**
* 抽象的工厂,具有抽象的createCar方法
* liyang 2020-07-10
* 具体的AudiFactory类实现CarFactory
*/
public interface CarFactory {
Car createCar();
}
步骤4
创建抽象工厂的具体实现工厂
package com.ly.factory.factorymethod;
public class AudiFactory implements CarFactory{
@Override
public Car createCar() {
return new Audi();
}
}
package com.ly.factory.factorymethod;
public class BenzFactory implements CarFactory{
@Override
public Car createCar() {
return new Benz();
}
}
package com.ly.factory.factorymethod;
public class BydFactory implements CarFactory{
@Override
public Car createCar() {
return new Byd();
}
}
步骤5
测试使用上述工厂创建产品,先创建响应工厂,然后使用该工厂创造产品
package com.ly.factory.factorymethod;
/**
* 工厂方法模式的客户端测试
* liyang 2020-07-10
*
* 增加一个具体的Car类,比如Benz类,实现Car接口
* 需要增加一个具体的BenzFactory实现CarFactory
* 通过增加新类扩展功能,不需要更改原有的代码
* 因此,满足OCP原则,但是会增加很多类,类 * ?
* 所以,在一般的开发中,推荐使用simpleFactory模式
*
*/
public class Client {
public static void main(String[] args) {
Car c1 = new AudiFactory().createCar();
Car c2 = new BenzFactory().createCar();
Car c3 = new BydFactory().createCar();
c1.run();
c2.run();
c3.run();
}
}
结果:
奥迪飞驰中
奔驰飞驰中
比亚迪飞驰中
Process finished with exit code 0
来源:https://blog.csdn.net/weixin_41876385/article/details/108009962


猜你喜欢
- 摘要分析验证码素材图片混淆原理,并采用selenium模拟人拖动滑块过程,进而破解验证码。人工验证的过程1、打开威锋网注册页面2、移动鼠标至
- 朋友让我帮忙写个程序从文本文档中导入数据到oracle数据库中,技术上没有什么难度,文档的格式都是固定的只要对应数据库中的字段解析就行了,关
- 实例如下:package com.bwsk.modules.weixin.util;import java.util.Random;/**
- 注意:页面分别拖拽一个FileUpload、Button1、Label1、GridView控件,并新建一个UploadedExcel文件夹D
- 本文介绍了Android ItemDecoration 实现分组索引列表的示例代码,分享给大家。具体如下:先来看看效果:我们要实现的效果主要
- 题目:求100之内的素数方法一:package airthmatic;public class demo8 { /** * 素数是指因数只有
- 本文实例为大家分享了Android弹性滑动类Scroller的具体代码,供大家参考,具体内容如下Scroller是什么 Scroller就是
- 一、简介正则表达式是一种匹配输入文本的模式,.Net 框架提供了允许这种匹配的正则表达式引擎,模式由一个或多个字符、运算符和结构组成。下面列
- Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。它与 JSP,Velocity,FreeMaker 等模
- spring-MVC实现简单的登录功能,供大家参考,具体内容如下今天我学习了spring-MVC实现简单的登录功能,本篇博客就讲解如何使用s
- 开源配置中心 - ApolloApollo(阿波罗)是携程框架部门研发的配置管理平台,能够集中化管理应用不同环境、不同集群的配置,配置修改后
- web采集的数据为 %u6B63%u5F0F%u4EBA%u5458,需要读取并转换为python对象,想了下不调用Javascript去e
- 一、DataGridView不显示下面的新行通常DataGridView的最下面一行是用户新追加的行(行头显示*)。如果不想让用户新追加行即
- 由于众所周知的原因,maven的库在中国大陆非常慢。我在百度上搜到的大部分文章都是直接在~/.m2/settings.xml 加入以下内容&
- 在一个项目中使用到一个问卷调查,在用户完成之后,需要统计所有题目中哪一个选项被选中次数最多。我的实现方法是将所有题目选中的选项拼接为一个字符
- 前几天在看一个cameraCTSbug时,结果在一个java for循环上有点蒙。正好赶上这个点总结一下。java中的控制结构:条件结构这里
- 在前面的文章中可以发现当我们通过RestTemplate调用其它服务的API时,所需要的参数须在请求的URL中进行拼接,如果参数少的话或许我
- 前言在我们java开发中,Date日期这个字段会被经常使用,比如获取当前系统的时间,获取上个月,上一年的时间,以及获取两个日期相差的时分秒数
- Java把内存分成两种,一种叫做栈内存,一种叫做堆内存在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。
- 本文总结分析了Android7.0版本影响开发的改进。分享给大家供大家参考,具体如下:低电耗模式会对闹铃、GPS 和 Wi-Fi 扫描 产生