类图

代码

//产品类,任意可“use”的产品都可继承该类
public abstract class Product {
public abstract void use();
} //工厂类
//定义了创建一个产品的流程,具体的创建代码需要子类实现
public abstract class Factory {
public final Product create(String owner) {
Product p = createProduct(owner);
registerProduct(p);
return p;
} protected abstract Product createProduct(String owner);
protected abstract void registerProduct(Product product);
} //一个具体的产品类
public class IDCard extends Product {
private String owner;
IDCard(String owner) {
System.out.println("制作"+owner+"的ID卡");
this.owner = owner;
} @Override
public void use() {
System.out.println("使用"+owner+"的ID卡");
} public String getOwner() {
return owner;
}
} //生产IDCard的工厂类
public class IDCardFactory extends Factory {
private List owners = new ArrayList(); @Override
protected Product createProduct(String owner) {
return new IDCard(owner);
} @Override
protected void registerProduct(Product product) {
owners.add(((IDCard)product).getOwner());
} public List getOwners() {
return owners;
}
}

角色介绍

  • Product:是一个抽象类,定义了在工厂方法模式中生成的类所具有的接口(API)

  • Creator:负责生成Product角色的抽象类。不用new关键字生成实例,而是调用生成实例的方法来创建实例,防止基类和其他具体的类耦合。它只知道调用方法可以生成实例,对具体生成实例的ConcreteCreator一无所知,对具体方法的实现也一无所知。

  • ConcreteProduct:具体的产品类。

  • ConcreteCreator:具体的创建产品类的工厂。

思想

  • 通过继承Product和Creator,我们可以创建各种各样的具体的工厂和产品,Product和Creator无需关心具体实现,他们不依赖于具体的工厂和产品的实现。

  • 可以将Product和Creator封装成一个框架,需要的时候直接引入,继承即可。

《图解设计模式》读书笔记2-2 Factory Method模式的更多相关文章

  1. 设计模式初学者笔记:Factory Method模式

    如果要选择一种最多人熟悉的Factory Method模式的具体应用,那么就应该是MFC的App/Doc架构了.Factory Method主要在类框架中使用,以解决以下问题:框架必须实例化类,但框架 ...

  2. HeadFirst设计模式读书笔记--目录

    HeadFirst设计模式读书笔记(1)-策略模式(Strategy Pattern) HeadFirst设计模式读书笔记(2)-观察者模式(Observer Pattern) HeadFirst设计 ...

  3. 设计模式(四)Factory Method模式

    简单来说,用Template Method模式来构建生成实例的工厂,就是Factory Method模式.在这个模式中,父类决定实例的生成方式,但不决定所要生成的具体的类,具体的处理全部交给子类负责. ...

  4. Java多线程编程实战指南 设计模式 读书笔记

    线程设计模式在按其有助于解决的多线程编程相关的问题可粗略分类如下. 不使用锁的情况下保证线程安全: Immutable Object(不可变对象)模式.Thread Specific Storage( ...

  5. [设计模式-创建型]工厂方法(Factory Method)

    概括 名称 Factory Method 结构 动机 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method 使一个类的实例化延迟到其子类. 适用性 当一个类不知道它所必 ...

  6. 设计模式之Factory Method模式

    作用:将实例的生成交给子类 用Template Method模式来构建生成实例的工厂,这就是Factory Method模式. 在Factory Method中,父类决定实例的生成方式,但并不决定所要 ...

  7. C#设计模式学习笔记:(2)工厂方法模式

    本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7567880.html,记录一下学习过程以备后续查用. 一.引言 接上一篇C#设计模式学习笔记:简单工厂模式( ...

  8. Factory Method模式

    Factory Method(工厂方法)模式属于GoF设计模式中的创建型分组,它用于在不之制定待创建对象的具体类的情况下创建对象.--<asp.net设计模式> 说白了就是一个人想要出国旅 ...

  9. JavaScript设计模式:读书笔记(未完)

    该篇随我读书的进度持续更新阅读书目:<JavaScript设计模式> 2016/3/30 2016/3/31 2016/4/8 2016/3/30: 模式是一种可复用的解决方案,可用于解决 ...

  10. 浅谈C++设计模式之工厂方法(Factory Method)

    为什么要用设计模式?根本原因是为了代码复用,增加可维护性. 面向对象设计坚持的原则:开闭原则(Open Closed Principle,OCP).里氏代换原则(Liskov Substitution ...

随机推荐

  1. Java 基础知识整理 (待整理)

    JVM之类加载器(ClassLoader)基本介绍 类加载器用于将class文件加载到JVM中去执行.下面介绍类加载器涉及到的基本概念和加载基本过程. 一.Java虚拟机与程序的生命周期 在运行Jav ...

  2. 将java项目转换成javaWeb项目

    1.Ctrl+Shift+R快捷键:找到此项目中的.project文件,打开修改文件内容 在<natures> </natures>代码标签中,添加些内容: <natur ...

  3. git ssh key配置&解决git每次输入密码

    git ssh key配置&解决git每次输入密码:https://blog.csdn.net/qq_42817227/article/details/81415404

  4. SCUT - 271 - CC 非诚勿扰 - FFT

    https://scut.online/p/271 第一次遇到没这么裸的,其实感觉到是卷积但是不知道怎么化.看来以后要多注意下标. #include <bits/stdc++.h> usi ...

  5. python学习第四十八天json模块与pickle模块差异

    在开发过程中,字符串和python数据类型进行转换,下面比较python学习第四十八天json模块与pickle模块差异. json 的优点和缺点 优点  跨语言,体积小 缺点 只能支持 int st ...

  6. P5504 [JSOI2011]柠檬

    传送门 显然考虑 $dp$ ,发现从右往左和从左往右是一样的,所以只考虑一边就行 发现对于切的左右端点,选择的 $s0$ 一定要为左右端点的贝壳大小,不然这个端点不产生贡献还不如分开来单个贡献 所以设 ...

  7. wxpython中单选框的两种创建方式源码展示

    #coding=utf-8 import wx class MyFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self,None,-1, ...

  8. c# ASP.NET MVC easyui-filebox 图片上传和显示

    原文:https://www.cnblogs.com/huatao/p/4727398.html https://www.cnblogs.com/weiweithe/p/4363458.html 表单 ...

  9. Maya2019下载安装与激活

    目录 1. 更多推荐 2. 下载地址 2.1. OneDrive 2.2. Window (64位) 2.3. MAC_OSX 3. 安装激活教程 1. 更多推荐 其他Maya版本的下载与激活:htt ...

  10. Sass @debug

    @debug 在 Sass 中是用来调试的,当你的在 Sass 的源码中使用了 @debug 指令之后,Sass 代码在编译出错时,在命令终端会输出你设置的提示 Bug: @debug 10em + ...