Factory Method(工厂方法)模式
Factory Method(工厂方法)模式
添仔哥哥 发表于9个月前
Factory Method(工厂方法)模式
  • 发表于 9个月前
  • 阅读 10
  • 收藏 0
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

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
博文 97
码字总数 39820
×
添仔哥哥
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: