当前位置: 首页 > news >正文

设计模式 - 工厂模式

简单工厂模式

public class CoffeeFactory {public Coffee get(string coffeeType) {Coffee coffee = null;if ("American".equals(coffeeType)) {coffee = new AmericanCoffee();} else if ("Latte".equals(coffeeType)) {coffee = new LatteCoffee();}return coffee; }
}

简单工厂模式不属于设计模式,比较像编程习惯。在开发中,也有人将工厂类中获取对象的方法定义为静态方法,此时为静态工厂模式,同样不属于设计模式。

优点:客户端无需关心对象的创建细节,向工厂传入参数即可获得相应的对象。初步实现责任的分离,工厂负责生产,客户端只负责消费。

缺点:增加新产品时需要修改工厂类的代码,违反了 OCP 开闭原则。

工厂方法模式

public interface CoffeeFactory {Coffee get();
}public class AmericanCoffeeFactory implements CoffeeFactory {@Overridepublic Coffee get() {return new AmericanCoffeeFactory();}
}public class LatteCoffeeFactory implements CoffeeFactory {@Overridepublic Coffee get() {return new LatteCoffeeFactory();}
}

工厂方法模式克服了简单工厂模式的缺点,在增加新产品时无需修改工厂类的代码。但每增加一个新产品就要增加一个具体产品类和一个对应的具体工厂类,导致系统复杂度增加。

抽象工厂模式

工厂方法模式考虑的是某一类产品的生产,如咖啡工厂只生产咖啡。而抽象工厂模式将考虑多类产品的生产,如甜品工厂不仅生产咖啡,还生产甜品。

在抽象工厂模式中,将同一个具体工厂所生产的位于不同等级的一组产品称为一个产品族。也就是说,美式咖啡和抹茶慕斯是同一产品族,拿铁咖啡和提拉米苏是同一产品族。

优点:可以保证通过同一个抽象工厂创建的多个对象始终来自同一族,比如通过 MacFactory 创建 UI 时,只能得到来自同一个风格的各种组件。

缺点:当产品族中需要增加一个新的产品时,所有的工厂类都需要修改。

相关文章:

  • Linux:库与链接
  • PostGIS栅格数据类型解析【raster】
  • 通过 API 获取 1688 平台店铺所有商品信息的完整流程
  • 查看mysql配置文件my.cnf的位置
  • 小土堆pytorch--神经网路-卷积层池化层
  • C++中String类
  • JavaScript的Button的contentItem属性
  • 销售易史彦泽:从效率工具到增长引擎,AI加速CRM不断进化
  • 家电行业数字化实践案例 | 易趋携手某知名家电集团打造数字化项目管理系统
  • msq基础
  • Python 包管理工具 uv
  • 以太网口16路数字量DI输入采集模块 Modbus TCP协议
  • SkyReels-V2:开启无限时长电影生成新时代
  • [创业之路-369]:企业战略管理案例分析-8-战略制定-战略制定起点:差距分析
  • Visual Studio 2022 插件推荐
  • 张 推进对话式心理治疗:SOULSPEAK的聊天机器人
  • pytorch小记(二十四):PyTorch 中的 `torch.full` 全面指南
  • 每日算法刷题Day11 5.20:leetcode不定长滑动窗口求最长/最大6道题,结束不定长滑动窗口求最长/最大,用时1h20min
  • python-leetcode 69.最小栈
  • YOLO中model.predict方法返回内容Results详解
  • 丹泽尔·华盛顿惊喜收获戛纳终身成就奖
  • 雀巢中国回应“巴黎水”丑闻报告:在中国销售的产品均符合相关法律法规要求
  • 王毅同德国外长瓦德富尔通电话
  • 上影节公布今年IMAX片单:暗涌、重生与感官的史诗
  • 中美贸易代表会谈后是否已确定下一次会谈?外交部回应
  • 网络直播间销售玩具盲盒被指侵权,法院以侵犯著作权罪追责