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

Java开发教程28-抽象工厂模式

本期是Java开发教程系列的第二十八期,设计模式专题第二期,讲抽象工厂模式:工厂方法管"一种产品的制造",它管"一整套产品的成套交付".适合"产品一族必须搭配着用"的场景,比如 UI 主题:一套主题的按钮、输入框、背景色要长得协调,不能按钮是深色的、背景是浅色的.若你已经理解抽象工厂与工厂方法的区别,可以跳过本期内容. 每期叠甲: 时间仓促,水平有限,文中难免存在缺点和错误,恳请广大开发者和从业者指正. 一、新问题:产品开始"成套"出现 上一期的日志系统,产品只有一种(Logger),工厂方法够用.但假设现在做的…

内容摘要

作者:#xianaldai 板块:#文档共建 本期是Java开发教程系列的第二十八期,设计模式专题第二期,讲抽象工厂模式:工厂方法管"一种产品的制造",它管"一整套产品的成套交付".适合"产品一族必须搭配着用"的场景,比如 UI 主题:一套主题的按钮、输入框、背景色要长得协调,不能按钮是深色的、背景是浅色的.若你已经理解抽象工厂与工厂方法的区别,可以跳过本期内容. 每期叠甲: 时间仓促,水平有限,文中难免存在缺点和错误,恳请广大开发者和从业者指正. 一、新问题:产品开始"成套"出现 上一期的日志系统,产品只有一种(Logger),工厂方法够用.但假设现在做的是 UI 框架,要支持主题换肤: 按钮(Button) 输入框(TextField) 背景色(Background) 关键约束:同一主题的组件必须成套.深色主题的按钮+深色输入框+深色背景,不能深色按钮配浅色输入框,不然界面就花了. 如果用工厂方法(每种产品一个工厂): // 需要 6 个工厂! DarkButtonFactory // 深色按钮 LightButtonFactory // 浅色按钮 DarkTextFieldFactory // 深色输入框 LightTextFieldFactory // 浅色输入框 DarkBackgroundFactory // 深色背景 LightBackgroundFactory // 浅色背景 问题很明显:"主题"这个整体概念被拆碎了:换主题要同时换三个工厂,漏换一个就是混搭事故.而且每加一种组件(比如复选框),就要给每个主题各加一个工厂,工厂数量跟着主题×组件数量膨胀. 直觉告诉我们:"深色"和"浅色"才是组团单位,组件是组里的成员.把"组"当成工厂的维度:这就是抽象工厂. 二、抽象工厂:工厂也分层 抽象工厂的结构,把上一期的"产品接口"换成"产品族接口": // 产品接口:每种产品一套 public interface Button { void render(); } public interface TextField { void

资讯来源

LinuxDo

原文链接

打开原文