设计模式【二】:工厂模式

简介: 设计模式【二】:工厂模式

写在前面


设计模式,其实在一定程度上代表着最优解,最佳实践,由一部分开发人员根据经验总结而出的解决方案,分别针对不同的场景的最优解决方案。


在当前环境下,设计模式也被开发人员极为推崇,并且利用其解决众多的问题,所以,学习设计模式刻不容缓。


下面我们就来看一下“工厂模式”。


工厂模式与单例模式一样,都是属于创建型设计模式,因为他们都是提供创建对象的解决方案。


工厂模式内部实现提供了接口来进行规范不同情况下创建对象的规则,由实现类对其进行实现,当开发人员去使用时,不需要关心其内部实现逻辑,只需要根据自身的需求实现不同的子类即可。


使用场景


我们最常用的日志收集器,就用到了这个设计模式,我们开发人员在使用的过程中,只需要实现不同的子类,就能判断出我们要使用的日志收集器的类型。


优缺点


优点就是开发人员只需要知道子类名称就可以进行创建对象来调用具体的方法,扩展性非常高,如果加入一种不同的方式,只需要基于接口再创建一个子类即可。


缺点就是随着类型的增多,我们的代码也会变得特别多,创建的类也会增多,长此以往不利于维护。


代码实现


实现一个日志保存接口。


public interface logInterface{
 void save();
}

然后创建对应的工厂类。


保存到A路径下


public class A implements logInterface{
  public void save(){
    //保存到A路径下的逻辑
  }
}

保存到B路径下


public class B implements logInterface{
  public void save(){
    //保存到B路径下的逻辑
  }
}

保存到C路径下


public class C implements logInterface{
  public void save(){
    //保存到C路径下的逻辑
  }
}

最后创建一个工厂类,用于对外统一暴露


public class Log{
  public logInterface(String type){
      if(type.equalsIgnoreCase("A")){
         return new A();
      }else if(type.equalsIgnoreCase("B")){
         return new B();
      }else if(type.equalsIgnoreCase("C")){
         return new C();
      }
      return null;
  }
}


相关文章
|
JSON Java 数据格式
springboot后台下载文件报错: Could not find acceptable representation
使用springboot实现从服务器下载文件功能时,报错:Could not find acceptable representation
1748 0
|
3月前
|
安全 Unix Java
linux中kill -9和kill -15区别
在 Linux/Unix 系统中,`kill -9` 和 `kill -15` 是终止进程的常用命令,核心区别在于发送的信号类型不同,导致进程终止行为截然不同。`kill -15`(SIGTERM)允许进程进行清理操作后优雅退出,适用于正常关闭;而 `kill -9`(SIGKILL)则强制终止进程,不给予任何清理机会,仅在进程无响应时使用。本文从信号类型、行为、工作原理及使用建议等方面进行详细对比,帮助你更安全、有效地管理进程。
351 0
|
3月前
|
缓存 Cloud Native Java
Java 面试微服务架构与云原生技术实操内容及核心考点梳理 Java 面试
本内容涵盖Java面试核心技术实操,包括微服务架构(Spring Cloud Alibaba)、响应式编程(WebFlux)、容器化(Docker+K8s)、函数式编程、多级缓存、分库分表、链路追踪(Skywalking)等大厂高频考点,助你系统提升面试能力。
167 0
|
4月前
|
分布式计算 算法 Go
【LeetCode 热题100】BFS/DFS 实战:岛屿数量 & 腐烂的橘子(力扣200 / 994 )(Go语言版)
本文讲解了两道经典的图论问题:**岛屿数量(LeetCode 200)** 和 **腐烂的橘子(LeetCode 994)**,分别通过 DFS/BFS 实现。在“岛屿数量”中,利用深度或广度优先搜索遍历二维网格,标记连通陆地并计数;“腐烂的橘子”则采用多源 BFS,模拟腐烂传播过程,计算最短时间。两者均需掌握访问标记技巧,是学习网格搜索算法的绝佳实践。
163 1
|
11月前
|
缓存 架构师 Java
图解 Spring 循环依赖,一文吃透!
Spring 循环依赖如何解决,是大厂面试高频,本文详细解析,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
图解 Spring 循环依赖,一文吃透!
|
Java 数据挖掘 数据库连接
Java使用直接内存的好处
综上所述,Java直接内存的使用为开发者提供了一种绕过JVM堆限制、直接高效操作内存资源的途径,特别适用于高吞吐量、低延迟和大规模数据处理的场景。虽然直接内存的使用需要更精细的管理以避免内存泄漏和过度消耗系统资源,但恰当的利用能够显著提升应用的性能表现,是现代高性能Java应用不可或缺的工具之一。
179 2
|
JavaScript 前端开发 调度
事件驱动模型
【10月更文挑战第7天】事件驱动模型
458 7
|
SQL 存储 关系型数据库
MySQL in和exists的取舍
本文讨论了SQL查询中IN和EXISTS的使用场景及其区别。IN适用于外表大而内表小的情况,会将子查询结果存储在临时表中;EXISTS则以外表为驱动表,适合外表小而内表大的情况,且不生成临时表。结论是:当子查询数据量大时,应使用EXISTS。
219 8
|
数据挖掘 索引 Python
Pandas中的排序技巧:让你的数据井然有序
Pandas中的排序技巧:让你的数据井然有序
690 1
|
安全 Java API
SpringBoot 实现 elasticsearch 索引操作(RestHighLevelClient 的应用)
SpringBoot 实现 elasticsearch 索引操作(RestHighLevelClient 的应用)
295 1