文档章节

Factory Method(工厂方法)模式

添仔哥哥
 添仔哥哥
发布于 2017/05/31 13:11
字数 304
阅读 11
收藏 0

1、介绍

Factory Method模式:父类决定实例的生成方式,但并不决定所要生成的具体的类,具体的处理全部交个子类负责。

2、例子类图

工厂方法模式

3、代码例子

Product:抽象产品类

package me.jtzen9.factory_method.framework;

public abstract class Product {
    public abstract void use();
}

Factory:抽象创建者类

package me.jtzen9.factory_method.framework;

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);
}

IDCard:具体的产品

package me.jtzen9.factory_method.idcard;
import me.jtzen9.factory_method.framework.Product;

public class IDCard extends Product {
    private String owner;
    IDCard(String owner) {
        System.out.println("制作" + owner + "的ID卡。");
    }
    @Override
    public void use() {
        System.out.println("使用" + owner + "的ID卡。");
    }
    public String getOwner() {
        return owner;
    }
}

IDCardFactory:具体的创建者

package me.jtzen9.factory_method.idcard;

import me.jtzen9.factory_method.framework.Factory;
import me.jtzen9.factory_method.framework.Product;

import java.util.ArrayList;
import java.util.List;

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;
    }
}

Main:测试代码

package me.jtzen9.factory_method;

import me.jtzen9.factory_method.framework.Factory;
import me.jtzen9.factory_method.framework.Product;
import me.jtzen9.factory_method.idcard.IDCardFactory;

public class Main {
    public static void main(String[] args) {
        Factory factory = new IDCardFactory();
        Product card1 = factory.create("小明");
        Product card2 = factory.create("小红");
        Product card3 = factory.create("小刚");
        card1.use();
        card2.use();
        card3.use();
    }
}

3、说明

摘至:【日】结城浩/著,杨文轩/译 .《图解设计模式》 北京:人民邮电出版社. 2017. 33~41

© 著作权归作者所有

共有 人打赏支持
添仔哥哥
粉丝 3
博文 105
码字总数 41550
作品 0
广州
程序员
java设计模式---三种工厂模式

工厂模式提供创建对象的接口。 工厂模式分为三类:简单工厂模式(Simple Factory), 工厂方法模式(Factory Method)和抽象工厂模式(Abstract Factory). GOF在《设计模式〉中将工厂模式分为两类:...

jason_wu_2
2016/12/22
2
0
Java创建型模式的讨论

创建型模式抽象了实例化过程。它们帮助一个系统独立于如何创建、组合和表示它的那些对象。一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象。 创建...

tequliapop
2016/01/13
96
0
设计模式之工厂模式(三)

意图: 定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟到子类(即:工厂子类)。 工厂模式结构图: 工厂模式代码实现 using System; using ...

NickHomeSelf
2016/08/20
21
0
设计模式开篇和工厂方法模式

设计模式开篇和工厂方法模式 开篇之言 最近准备将23种设计模式用ruby和javascript两种语言分别实现,为什么要这么做 设计模式用途 为什么要学设计模式?这里谈谈自己对设计模式看法 废话完成...

JackSongBlack
2014/05/06
0
0
设计模式分类

一.创建型模式(主要解决对象的创建) 1.简单工厂模式(Simple Factory) 2.工厂方法模式(Factory Method) 3.抽象工厂模式(Abstract Factory) 4.创建者模式(Builder) 5.原型模式 (Prototype) ...

黄孟
2016/10/16
5
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

springmvc入门之映射处理器(一)

1.简析映射处理器 在spring mvc中,使用映射处理器可以把web请求映射到正确的处理器上,spring内置了很多映射处理器,而且我们也可以自定义映射处理器。下面的实例展示spring中最常用的两个映...

明理萝
1分钟前
0
1
一个破碎的人,窃机浪漫飞行后自由坠毁

简评:A sick man who needs treatment 29 岁的 Richard Russell 是西雅图机场地勤人员,上周五,在刚进入秋天的日子,他偷了一架未载客的飞机,在空中飞行独自超过一小时,甚至驾机在空中翻...

极光推送
3分钟前
0
0
linux一次性解压多个.gz或者.tar.gz文件

解压多个压缩包 对于解压多个.gz文件的,用此命令: for gz in *.gz; do gunzip $gz; done 对于解压多个.tar.gz文件的,用下面命令: for tar in *.tar.gz; do tar xvf $tar; done...

小兔纸乖乖
13分钟前
0
0
bower 安装包的使用

一,bower是什么? bower是一种包管理器,它可用于搜索、安装和卸载如JavaScript、HTML、CSS之类的网络资源。 它依赖于node.js和npm,如果要使用它需要先安装node.js和npm,因为node.js包含n...

nsns
16分钟前
0
0
EXCEL简易的进度条

在进度栏非常简单的进度控制,以下知道程序是否已完成。 Dim x As IntegerDim MyTimer As Double'Change this loop as needed.For x = 1 To 50' Do stuffApplication.StatusBar = ...

tedzheng
21分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部