返回 AI 资讯
社区讨论LinuxDo 最新

Java开发教程27-工厂方法模式

本期是Java开发教程系列的第二十七期,设计模式专题第一期,讲工厂方法模式:把"创建对象"这件事从业务代码里请出去,集中管理.这是创建型模式的开篇,也是你见过的第一个"模式"名字:第 19 期的 Executors.newFixedThreadPool(),背后就是它.若你已经理解简单工厂与工厂方法的区别,可以跳过本期内容. 每期叠甲: 时间仓促,水平有限,文中难免存在缺点和错误,恳请广大开发者和从业者指正. 一、问题:到处 new 有什么不好 假设要写一个日志系统,支持三种日志:控制台打印、写文件、发数据库.最…

内容摘要

作者:#xianaldai 板块:#文档共建 本期是Java开发教程系列的第二十七期,设计模式专题第一期,讲工厂方法模式:把"创建对象"这件事从业务代码里请出去,集中管理.这是创建型模式的开篇,也是你见过的第一个"模式"名字:第 19 期的 Executors.newFixedThreadPool(),背后就是它.若你已经理解简单工厂与工厂方法的区别,可以跳过本期内容. 每期叠甲: 时间仓促,水平有限,文中难免存在缺点和错误,恳请广大开发者和从业者指正. 一、问题:到处 new 有什么不好 假设要写一个日志系统,支持三种日志:控制台打印、写文件、发数据库.最直白的写法: // 业务代码里,到处是这种分支 Logger logger; String type = config.get("logger.type"); if (type.equals("console")) { logger = new ConsoleLogger(); } else if (type.equals("file")) { logger = new FileLogger("app.log"); } else { logger = new DatabaseLogger(); } logger.log("玩家上线"); 这段"选择哪种日志、怎么构造"的逻辑,会出现在每一个需要日志的类里.十几个类,每处复制一份.问题随之而来: 改动扩散:日志类型想加一种(比如网络日志),这十几个地方的 if-else 全要改 依赖混乱:业务代码直接依赖所有 Logger 实现类,第 7 期讲的"面向接口"形同虚设 构造细节泄漏:业务代码不该知道"文件日志要传文件名" 解决方向:把"怎么造 Logger"集中到一个地方,业务代码只说"我要个 Logger".这就是工厂的由来. 二、简单工厂:一个方法,按参数造 先把创建逻辑收进一个类: public class LoggerFactory { // 简单工厂:一个静态方法,按类型返回不同对象 public static Logger cre

资讯来源

LinuxDo

原文链接

打开原文