Java 深入探究讲解简单工厂模式
作者:静静子? 发布时间:2022-12-25 12:02:06
标签:Java,简单工厂,设计模式
1. 简单工厂介绍
简单工厂有一个具体的工厂类,可以生产不同的产品,属于创建型设计模式。
注意:简单工厂模式 不属于23种设计模式之列
2. 简单工厂类图UML
3. 简单工厂角色说明
简单工厂(SimpleFactory):是简单工厂模式的核心,负责实现创建所有实例的内部逻辑,工厂类的创建产品类的方法可以被外界直接访问,创建所需的产品对象。
抽象产品(Product):是简单工厂创建所有对象的父类,负责描述所有实例公有的公共接口
具体产品(ConcreteProduct):是简单工厂创建的具体对象
4. 代码实现
简单工厂实现:
/**
* 抽象产品,提供所有具体产品的共有的方法
*/
public interface Product {
public void show();
}
/**
* 具体产品1
*/
public class ConcreteProduct1 implements Product {
@Override
public void show() {
System.out.println("具体产品1展示...");
}
}
/**
* 具体产品2
*/
public class ConcreteProduct2 implements Product {
@Override
public void show() {
System.out.println("具体产品2展示...");
}
}
/**
* 简单工厂
*/
public class SimpleFactory {
//提供一个方法,基于不同的参数获取不同的实例对象
public static Product getConcreteProduct(int productType) {
switch (productType) {
case Const.Product1:
return new ConcreteProduct1();
case Const.Product2:
return new ConcreteProduct2();
case Const.Product3:
return new ConcreteProduct3();
}
return null;
}
final class Const {
static final int Product1 = 1;//表示是ConcreteProduct1产品
static final int Product2 = 2;//表示是ConcreteProduct2产品
static final int Product3 = 3;//表示是ConcreteProduct3产品
}
调用方式:
//获取产品1
Product product = SimpleFactory.getConcreteProduct(Const.Product1);
product.show();
//获取产品2
Product product1 = SimpleFactory.getConcreteProduct(Const.Product2);
product1.show();
使用步骤:
创建抽象产品类和定义具体产品的公共接口
创建具体产品类,定义生产的具体产品
创建工厂类,通过创建静态方法根据传入不同的参数从而创建不同的具体产品的实例
外界通过调用工厂类的静态方法,传入不同的参数创建不同的产品实例
5. 优缺点
优点:
代码逻辑比较简单,工厂类包含必要的创建对象的逻辑,可以决定创建具体的产品
调用方无需指导所创建具体产品的类名,只需要知道参数即可
缺点:
简单工厂违背开闭原则,工厂类负责产品的创建职责过重,一旦新增产品需要对工厂类内部逻辑新增判断
系统扩展困难,产品过多会造成逻辑过于复杂
6. 使用场景
对于产品种类比较少的情况,可以考虑使用简单工厂,调用方只需要传入工厂类的参数,不需要关注如何创建的逻辑.
来源:https://blog.csdn.net/qq_45981295/article/details/122362784


猜你喜欢
- 现在,让我们找出“如何学习 Java 编程”的答案。通过承认您是初学者这一事实开始您的学习之旅很重要
- SpringBoot 中配置redis作为session 缓存器。 让shiro引用本文是建立在你是使用这shiro基础之上的补充内容第一种
- 1.pom文件导入依赖<!-- kafka --><dependency> <groupId>
- 前言Spring的一个核心功能是IOC,就是将Bean初始化加载到容器中,Bean是如何加载到容器的,可以使用Spring注解方式或者Spr
- 首先:我们要建一个web项目接着: 我们先来导入struts的xml文件第一步:右击你的项目名,鼠标到MyEclipse会看到一个add s
- 最近在做一个项,有一个收藏的功能。后来看到了一点资讯的收藏动画,感觉不错,所有自己就实现了一下。这是效果:附上完整的代码,其中Animati
- 本文实例为大家分享了Android实现记事本功能的具体代码,供大家参考,具体内容如下MainActivity.java代码:package
- 一、问题由来项目开发中,由于实际需要将某一个功能模块抽取成了一个单独的服务,其他地方需要调用的时候,通过Spring提供的RestTempl
- 本文实例为大家分享了Android判断网络状态的具体代码,供大家参考,具体内容如下一、权限需要在AndroidManifest.xml 添加
- 本文实例讲述了java 线程方法join简单用法。分享给大家供大家参考,具体如下:虽然关于讨论线程join方法的博客已经很多了,不过个人感觉
- 悲观锁、乐观锁简介: 悲观锁:同步操作。即用户A在操作某条数据时,为其上锁,限制其他用户操作,用户A操作完成提交事务后其他用户方可
- 场景做为一个码农,大部分都集中在一二线城市,所以租房也就无可避免,面对如今五花八门的租房信息,往往很难找到合适的房子。而如今的这些租房软件,
- zip 是一个非常常见的压缩包格式,本文主要用于说明如何使用代码 文件或文件夹压缩为 zip压缩包及其解压操作,我们采用的是 微软官方的实现
- 这次是列表滑动删除的第三波,仿微信的列表滑动删除。先上个效果图: 前面的文章里面说过开源框架SwipeListView
- 某次,在大型的工程代码中,我这样调用:#include <iostream>using namespace std;namesp
- 线程池类图我们最常使用的Executors实现创建线程池使用线程主要是用上述类图中提供的类。在上边的类图中,包含了一个Executor框架,
- 大多数网站会设置用户权限,如过滤非法用户,用户不登录时不能进行访问,或者设置访问的权限,如部分内容仅对VIP开放等等,这些权限的控制都可以用
- 说起观察者模式,估计在园子里能搜出一堆来。所以写这篇博客的目的有两点:1.观察者模式是写松耦合代码的必备模式,重要性不言而喻,抛开代码层面,
- android系统提供了Environment.getExternalStorageDirectory()接口获得存储器的路径,但是这个接口
- 本文实例为大家分享了c语言实现可自定义的游戏地图的具体代码,供大家参考,具体内容如下博主相信每个人都有想做游戏的冲动,那么本文将给出一个用c