1. 程式人生 > >圖解設計模式-factory Method模式

圖解設計模式-factory Method模式

pan 進行 register ray method tor ner style idcard

用Template Method模式構建生成實例的工廠。 在factory method模式中,父類決定實例的生成方式,但是不決定所要生成的具體類,具體的處理交給子類負責。 角色: Product產品:它定義了在Factory Method模式中的生成的那些實例所持有的接口,由Product類扮演。 Creator創建者:負責生成Product角色的抽象類,由Factory類扮演。 ConcreteProduct具體產品:決定具體的產品,由IDCard類扮演。 ConcreteCreator具體創建者:負責生成具體的產品,有IDCardFactory類扮演此角色。 優點: 提供統一實例工廠的框架。 框架與具體實現分開:可以根據不同產品類、創建不同的產品工廠,例如下面代碼是IDCard產品與IDCardFactory產品工廠,也可以創建其他的產品和產品工廠。 框架:Product產品抽象類、Factory工廠抽象類 具體實現:IDCard產品類、IDCardFactory產品工廠類 代碼:
public abstract class Factory {

    public final Product create(String owner) {
        Product product = createProduct(owner);
        register(product);
        return product;
    }

    public abstract Product createProduct(String owner);
    public abstract void register(Product product);
}

public abstract class Product {

    public abstract void use();
}

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; } }

public class IDCardFactory extends Factory {
    List owners = new ArrayList<>();

    @Override
    public Product createProduct(String owner) {
        return new IDCard(owner);
    }

    @Override
    public void register(Product product) {
        owners.add(((IDCard)product).getOwner());
    }
}

public class Main {
    public static void main(String[] args){
        Factory factory = new IDCardFactory();
        Product product1= factory.create("s1");
        Product product2= factory.create("s2");
        Product product3= factory.create("s3");
        product1.use();
        product2.use();
        product3.use();
    }
}
執行結果: 創建s1的ID卡 創建s2的ID卡 創建s3的ID卡 使用s1的ID卡 使用s2的ID卡 使用s3的ID卡 代碼說明: Factory抽象類中的create方法定義了創建實例的流程,即調用方法的順序,先調用createProduct創建產品,在調用register方法把創建的產品進行保存(保存在哪裏由具體的工廠決定)。 Product抽象類中use方法定義了被工廠創建的實例中的使用方法,即use方法。(具體實例中方法不用,只起到測試作用,用於確認工廠確實可以創建實例並且調用到對應方法) IDCardFactory類繼承了Factory抽象類,定了createProduct和register方法的具體實現,把創建的實例保存到List集合中。

圖解設計模式-factory Method模式