工厂方法模式

  • 一、概述
  • 二、结构
  • 三、实现
  • 四、总结
  • 在最后

一、概述

定义一个用户创建对象的工厂(接口),让接口的子类决定去实例化哪个对象,依赖其抽象编程。即工厂方法使一个类的实例化延迟到其工厂的子类。

二、结构

工厂方法模式的主要角色

  • 抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法来创建产品。
  • 具体工厂(ConcreFactory):主要实现抽象工厂中的抽象方法,完成具体产品的创建。
  • 抽象产品(Product):定义了产品的规范,描述了产品的主要特性。
  • 具体产品(ConcreteProduct):实现了抽象产品决定定义的结偶,由具体工厂来创建,它同具体工厂之间一一对应。

三、实现

工厂方法类图如下:

代码如下:
抽象工厂:

public interface CoffeeFactory {public Coffee create();
}

抽象产品:

public abstract class Coffee {public String name;//加奶public void addMilk(){System.out.println("加奶");}//加糖public void addSugar() {System.out.println("加糖");}public abstract String getName();public Coffee setName(String name) {this.name = name;return this;}
}

具体的两个工厂:

public class LatteCoffeeFactory implements CoffeeFactory {@Overridepublic Coffee create() {return new LatteCoffee();}
}
public class AmericanCoffeeFactory implements CoffeeFactory{@Overridepublic Coffee create() {return new AmericanCoffee();}
}

具体的两个产品:

public class AmericanCoffee extends Coffee {@Overridepublic String getName() {return "美式咖啡";}
}
public class LatteCoffee extends Coffee {@Overridepublic String getName() {return "拿铁咖啡";}
}

创建对象:

public class CoffeeStore {private CoffeeFactory factory;public CoffeeStore setFactory(CoffeeFactory factory) {this.factory = factory;return this;}// 点咖啡的功能public Coffee orderCoffee(){Coffee coffee = factory.create();//加配料coffee.addMilk();coffee.addSugar();return coffee;}
}

四、总结

优点:

  • 前文中提到了,具体的产品和具体的工厂是一一对应的,所以用户只需知道具体工厂的名称就可以得到所要的产品,无需知道产品的具体创造过程。
  • 如果以后要在系统中添加新的产品时,只需添加具体的产品类和对应的具体工厂类,无需对原工厂进行修改,满足开闭原则。

缺点:

  • 每增加一个产品,就要增加一个具体的产品类和一个对应的具体工厂类,这增加了系统的复杂度。(如果系统中的产品类特别特别的多,就会缠上类爆照。。)

ps:
开闭原则:对修改关闭,对扩展开放。


在最后

❤️ 博主笔力尚浅,文中有疏漏之处还请留言指正,不胜感激。❤️ 谢谢大家。❤️

23种设计模式之工厂方法模式(黑马程序员)相关推荐

  1. 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之工厂方法模式

    · 工厂方法模式在王者荣耀中的应用 · 一.简述 王者荣耀这款游戏目前一共有100位英雄,游戏设计师根据英雄技能.属性.天赋等因素,将英雄划分为射手.辅助.打野.法师.坦克.战士等职业. 在本实例中, ...

  2. 23种设计模式之工厂方法模式

    工厂方法模式的定义 定义: 定义一个用于创建对象的接口,让子类决定实例化哪一个类. 工厂方法使一个类的实例化延迟到其子类 工厂方法模式的通用类图: 其中 Product 负责产品的共性,实现对事物最抽 ...

  3. 一天一种设计模式之六-----工厂方法模式

    2019独角兽企业重金招聘Python工程师标准>>> 一.工厂方法模式 工厂方法模式属于创建型模式. 工厂方法模式定义:定义一个用于创建对象的借口,让子类决定实例化哪一个类.工厂方 ...

  4. 备战面试日记(3.3) - (设计模式.23种设计模式之结构型模式)

    本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.9 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文章 ...

  5. 备战面试日记(3.2) - (设计模式.23种设计模式之创建型模式)

    本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.6 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文章 ...

  6. 备战面试日记(3.4) - (设计模式.23种设计模式之行为型模式)

    本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.12 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文 ...

  7. 设计模式之工厂方法模式(创建型)

    一.模式定义 工厂方法模式:又称工厂模式,也叫虚拟构造器模式,属于构建型设计模式,工厂方法模式是在简单工厂模式上进行拓展,生产产品的过程由具体工厂类实现,基类只实现接口,这使得工厂方法模式可以在不修改 ...

  8. 设计模式之工厂方法模式应用例题

    设计模式之工厂方法模式应用例题 题目描述 类结构图及相关说明 程序代码 运行结果 题目描述 现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式都设计一个图片读取器(ImageReade ...

  9. 设计模式:工厂方法模式(Factory method)

    设计模式:工厂方法模式(Factory method) 一.问题 在前一章中通过披萨的实例介绍了简单工厂模式.在披萨实例中,如果我想根据地域的不同生产出不同口味的披萨,如纽约口味披萨,芝加哥口味披萨. ...

最新文章

  1. 是 String , StringBuffer 还是 StringBuilder ?
  2. 【Unity】第8章 GUI开发
  3. 使用 NIO 实现 echo 服务器
  4. java JFrame 设置背景颜色无效的理解
  5. SAP CRM WebClient UI calculated fields的工作原理
  6. MySqlException: The user specified as a definer ('root'@'%') does not exist解决方法
  7. Java版 微信红包算法
  8. 潜意识、读懂行为、说服的艺术
  9. 使用emacs + cscope + ecb替代source insight
  10. SoureInsight 打开STM32的Kell 工程
  11. MAC苹果应用软件,财务管理,三D制图,清理神器
  12. 教程系列 - 用模板快速上线一个HR 服务中心
  13. Tobii Eye Tracker 4C 入门教程(一)
  14. 5G NR随机接入过程
  15. 【活动更新】第一届Openbravo社区早餐会将与5/28在上海举办
  16. 金山词霸2009牛津with SP3完全破解版(含全部本地词库和语音包)
  17. I-D-E-A中maven的常用指令
  18. SpringCloud微服务之间使用Feign调用不通情况举例
  19. NSDP协议PORTAL服务器源码
  20. 射频开关-RF Switch拆机

热门文章

  1. 移动端真机测试,挺实用的。
  2. JDBC连接SQLServer2012报错:驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。
  3. 经典诺基亚游戏Rapid-Roll SDL2实现
  4. 百度人脸识别---横屏,竖屏的实现
  5. VDI负载测试工具使用分享:Login VSI简介
  6. 计算机毕业设计ssmJAVA高校田径运动会管理61s38系统+程序+源码+lw+远程部署
  7. Python相关书籍
  8. 事件冒泡,阻止事件冒泡
  9. 1135131-50-8,Bromo-PEG1-CH2CO2H,Bromo-PEG1-acetic acid含有溴基和末端羧酸的PEG连接剂
  10. 利用Python进行词频统计并生成词云——以京东商城iphone13购物评论为例