目录
1.Factory Method模式
1.1 作用
该模式就是用Template Method模式来构建生成实例的工厂。父类决定实例的生成方式(模板方法),但并不决定所要生成的具体的类,具体的全部交给子类负责。
1.2 示例程序
1.2.1 示例程序类图
1.2.2 Product类
//工厂要生成的实例抽象类
public abstract class Product {
public abstract void use();
}
1.2.3 Factory类
//工厂抽象类
public abstract class Factory {
protected abstract Product createProduct(String owner);
protected abstract void registerProduct(Product p);
public final Product create(String owner) {//父类中的模板方法
Product p = createProduct(owner);
registerProduct(p);
return p;
}
}
1.2.4 IDCard类
//具体的产品类
public class IDCard extends Product{
private String owner;
public IDCard(String owner) {
System.out.println("制作" + owner + "的ID卡");
this.owner = owner;
}
@Override
public void use() {
System.out.println("使用" + owner + "的ID卡");
}
public String getOwner() {
return owner;
}
}
1.2.5 IDCardFactory类
//工厂的具体类
public class IDCardFactory extends Factory{
private List<String> owners = new ArrayList<>();
@Override
protected Product createProduct(String owner) {
return new IDCard(owner);
}
@Override
protected void registerProduct(Product p) {
owners.add((((IDCard) p)).getOwner());
}
public List getOwners() {
return owners;
}
}
1.2.6 Main类
public class Main {
public static void main(String[] args) {
Factory factory = new IDCardFactory();
Product p1 = factory.createProduct("小明");
Product p2 = factory.createProduct("小红");
Product p3 = factory.createProduct("小刚");
p1.use();
p2.use();
p3.use();
}
}
输出:
1.3 Factory Method模式中的角色
- Product(产品):是一个抽象类,定义了在工厂方法模式中生成的那些实例所持有的接口API。
- Creator(创建者):是负责生成Product角色的抽象类。
- ConcreteProduct(具体的产品):属于具体加工这一方,决定了具体的产品。
- ConcreteCreator(具体的创建者):属于具体加工这一方,负责生成具体的产品。
- Factory Method模式的类图:
1.4 其他特点
- 在使用已有的框架生成全新的类时,只需要定义具体产品以及对应的工厂,完全不需要对框架进行修改
- 对于工厂中的抽象方法createProduct()方法有三种实现方式:
- 指定该方法为抽象方法,子类必须实现;
- 为该方法实现默认处理,如果子类不实现,就按照父类中的默认方式使用;
- 在该方法中抛出异常,如果子类不实现,就会抛出异常,子类也必须实现。
根据图解设计模式书籍进行整理。