工厂方法设计模式(Factory Method)
  anLrwkgbyYZS 2023年12月30日 14 0


1. 概述

用Template Method设计模式来构建生成实例的工厂就是工厂方法(Factory Method)设计模式。

在工厂方法(Factory Method)设计模式,父类决定实例的生成方式,但不决定要生成的具体的类,具体的处理全部交给子类负责,这样就可以将生成实例的框架(framework)和负责生成实例的类解耦。

2. 代码实现

首先要创建两个包,一个framework包,framework包中有工厂类、物品类,这两个类组成了生成实例的框架。

一个具体包,里面一个具体物品工厂类、具体物品类。

这里用铅笔来作为具体物品。

工厂方法设计模式(Factory Method)_设计模式

工厂类 Factory.java ,create() 方法生成实例,具体的处理由createProduct(String owner)、registerProduct(Product product)这两个方法,这两个方法由子类负责:

工厂方法设计模式(Factory Method)_工厂类_02

package factoryMethod.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);
}

物品类,Product.java :

package factoryMethod.framework;

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

具体物品工厂类PencilFactory.java,继承Factory.java:

工厂方法设计模式(Factory Method)_设计模式_03

package factoryMethod.pencil;

import factoryMethod.framework.Factory;
import factoryMethod.framework.Product;

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

public class PencilFactory extends Factory {
    private List owners = new ArrayList();

    @Override
    protected Pencil createProduct(String owner) {
        return new Pencil(owner);
    }

    @Override
    protected void registerProduct(Product product) {
        owners.add(((Pencil)product).getOwner());
    }
}

具体物品类,Pencil.java:

package factoryMethod.pencil;

import factoryMethod.framework.Product;

public class Pencil extends Product {
    private String owner;
    Pencil(String owner) {
        System.out.println("制作" + owner + "的pencil");
        this.owner = owner;
    }

    @Override
    public void use() {
        System.out.println("使用" + owner + "的pencil");
    }

    public String getOwner() {
        return owner;
    }
}

测试类,test.java :

package factoryMethod;

import factoryMethod.framework.Factory;
import factoryMethod.framework.Product;
import factoryMethod.pencil.PencilFactory;

public class test {
    public static void main(String args[]) {
        Factory factory = new PencilFactory();
        Product p1 = factory.create("aaa");
        Product p2 = factory.create("bbb");
        Product p3 = factory.create("ccc");
        p1.use();
        p2.use();
        p3.use();
    }
}

运行截图如下所示:

工厂方法设计模式(Factory Method)_java_04

参考文献:

  • 图解设计模式 - 结成浩著、杨文轩译 - 人民邮电出版社
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月30日 0

暂无评论

推荐阅读
anLrwkgbyYZS