-
一、Factory Method 模式(将生成的实例交给子类)
-
二、示例程序
-
-
- 2.1 框架类 (framework包下的)
-
-
2.2 idCard
-
2.3 main
-
2.4 演示效果
-
三、原文链接查看以及源代码
Author: Gorit
Date:2021年1月
Refer:《图解设计模式》
2021年发表博文: 13/50
一、Factory Method 模式(将生成的实例交给子类)
==============================================================================================
该模式用于生成实例,Factory 是工厂,用 Template Method 模式来构建生成实例的工厂。
在这个模式中,父类决定实例的生成方式,但并不决定索要生成的具体的类,具体的处理全部交给子类来负责。
这样就可以将生成实例的框架(framework)和实际负责生成实例的类解耦
=====================================================================
这个示例程序的功能是制作身份证(ID卡),它其中有 5个类
| 类称 | 功能 |
| — | — |
| Product | 只定义抽象方法 use 的抽象类 |
| Factory | 实现了 create() 方法的抽象类 |
| IDCard | 实现了 use() 方法的类 |
| IDCardFactory | 实现了 createProduct、registerProduct 方法的类 |
| Main | 测试程序行为的类 |
2.1 框架类 (framework包下的)
Product
package Factory.framework;
/**
-
声明产品的类,仅声明 use 方法,方法的实现交给子类负责
-
定义产品 ”任意是可以 use 的“
*/
public abstract class Product {
public abstract void use();
}
Factory
package Factory.framework;
/**
-
我们使用 Template Method 模式
-
声明:
-
- 用于生成产品的 createProduct 抽象方法
-
- 用于注册产品的 registerProduct 抽象方法
-
具体实现内容根据 Factory Method 适用的场景不同而不同,具体生成示例的时候一定会使用到 Template Method 模式
*/
public abstract class Factory {
public final Product create(String owner) {
Product p = createProduct(owner);
registerProduct§;
return p;
}
protected abstract void registerProduct(Product p);
protected abstract Product createProduct(String owner);
}
2.2 idCard
IDCard
package Factory.idcard;
import Factory.framework.*;
/**
- 负责加工处理
*/
public class IDCard extends Product{
private String owner;
public IDCard(String owner) {
System.out.println(“制作”+owner +“的 ID 卡”);
this.owner = owner;
}
public void use() {
System.out.println(“使用” + owner + “的 ID 卡”);
}
public String getOwner() {
return owner;
}
}
IDCardFactory
package Factory.idcard;
import Factory.framework.Factory;
import Factory.framework.Product;
import java.util.*;