文档章节

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

© 著作权归作者所有

共有 人打赏支持
添仔哥哥
粉丝 4
博文 107
码字总数 43116
作品 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

没有更多内容

加载失败,请刷新页面

加载更多

string类回顾

writeademo
4分钟前
0
0
在DataWorks中实现指定UDF只能被指定账户访问

在DataWorks中实现指定资源被指定账户访问 背景 之前写过一篇文章是关于“DataWorks和MaxCompute内部权限体系的区别”有兴趣的朋友可以点击阅读查看详情。但是还是有些同学会问,我如何在Dat...

阿里云云栖社区
5分钟前
0
0
MaxCompute安全管理指南-案例篇

通过《MaxCompute安全管理-基础篇》了解到MaxCompute和DataWorks的相关安全模型、两个产品安全方面的关联,以及各种安全操作后,本篇主要给出一些安全管理案例,给安全管理的成员作为参考。 ...

阿里云官方博客
9分钟前
0
0
Spring Cloud 中使用Feign解决参数注解无法继承的问题

Spring Cloud 中使用Feign解决参数注解无法继承的问题 在使用Feign的时候,通常先写一个接口类,然后再写实现类,根据官网的例子接下来编写一个简单的Feign的请求例子 @FeignClient("spring...

不学无数的程序员
10分钟前
0
0
springboot kafka读写

依赖 <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> <version>1.1.1.RELEASE</version></dependency> 配置 #=======......

张欢19933
16分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部