文档章节

Factory Method(工厂方法)模式

添仔哥哥
 添仔哥哥
发布于 2017/05/31 13:11
字数 304
阅读 12
收藏 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
码字总数 41813
作品 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

没有更多内容

加载失败,请刷新页面

加载更多

大数据教程(6.1)hadoop生态圈介绍及就业前景

1. HADOOP背景介绍 1.1、什么是HADOOP 1.HADOOP是apache旗下的一套开源软件平台 2.HADOOP提供的功能:利用服务器集群,根据用户的自定义业务逻辑,对海量数据进行分布式处理 3.HADOOP的核心组...

em_aaron
42分钟前
1
0
hadoop垃圾回收站

在生产生,hdfs回收站必须是开启的,一般设置为7天。 fs.trash.interval 为垃圾回收站保留时间,如果为0则禁用回收站功能。 fs.trash.checkpoint.interval 回收站检查点时间,一般设置为小于...

hnairdb
昨天
1
0
腾讯与Github的魔幻会面背后的故事…

10月22日,腾讯开源管理办公室有幸邀请到Github新晋CEO Nat Friedman,前来鹅厂参观交流。目前腾讯已经有近70个项目在Github上开源,共获得17w stars,世界排名11位。Github是腾讯开源的主阵...

腾讯开源
昨天
7
0
单例模式

单例模式(Singleton pattern)属于创建型设计模式。 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对...

NinjaFrog
昨天
2
0
TypeScript基础入门之装饰器(三)

转载 TypeScript基础入门之装饰器(三) 继续上篇文章[TypeScript基础入门之装饰器(二)] 访问器装饰器 Accessor Decorator在访问器声明之前声明。 访问器装饰器应用于访问器的属性描述符,可用...

durban
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部