设计模式(四)----工厂方法模式

目录

1.Factory Method模式

1.1 作用

1.2 示例程序

1.2.1 示例程序类图

1.2.2 Product类

1.2.3 Factory类

1.2.4 IDCard类

1.2.5 IDCardFactory类

1.2.6 Main类

1.3 Factory Method模式中的角色

1.4 其他特点


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()方法有三种实现方式:
    • 指定该方法为抽象方法,子类必须实现;
    • 为该方法实现默认处理,如果子类不实现,就按照父类中的默认方式使用;
    • 在该方法中抛出异常,如果子类不实现,就会抛出异常,子类也必须实现。

根据图解设计模式书籍进行整理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值