提供一系列相關或相互依賴的介面,不用指定他們的具體類別
分成兩個部分
1.產品:寫產品類別後,讓子類繼承
以下寫兩個產品,並寫4個子類別,其中2個子類別繼承第一個;另外2個子類別繼承第二個
2.工廠:工廠裡寫回傳1的物件,然後也是讓子類別實作
※產品
public abstract class AbstractProductXXX {
    public void sameMethod() {
        System.out.println("抽象產品XXX共有的方法");
    }
    
    public abstract void doSomething();
}
--------------------
public abstract class AbstractProductOOO {
    public void sameMethod() {
        System.out.println("抽象產品OOO共有的方法");
    }
    
    public abstract void doSomething();
}
========================================
public class ProductA extends AbstractProductXXX {
    @Override
    public void doSomething() {
        System.out.println("產品A實現抽象產品1的方法");
    }
}
--------------------
public class ProductB extends AbstractProductXXX {
    @Override
    public void doSomething() {
        System.out.println("產品B實現抽象產品1的方法");
    }
}
--------------------
public class ProductC extends AbstractProductOOO {
    @Override
    public void doSomething() {
        System.out.println("產品C實現抽象產品2的方法");
    }
}
--------------------
public class ProductD extends AbstractProductOOO {
    @Override
    public void doSomething() {
        System.out.println("產品D實現抽象產品2的方法");
    }
}
※
※工廠
public abstract class AbstractFactory {
    public abstract AbstractProductXXX getProductXXX();
    
    public abstract AbstractProductOOO getProductOOO();
}
--------------------
public class BreadFactory extends AbstractFactory {
    @Override
    public AbstractProductXXX getProductXXX() {
        return new ProductA();
    }
    
    @Override
    public AbstractProductOOO getProductOOO() {
        return new ProductC();
    }
}
--------------------
public class GrapeFactory extends AbstractFactory {
    @Override
    public AbstractProductXXX getProductXXX() {
        return new ProductB();
    }
    
    @Override
    public AbstractProductOOO getProductOOO() {
        return new ProductD();
    }
}
※
※測試
AbstractFactory bf = new BreadFactory(); AbstractProductXXX bf1 = bf.getProductXXX(); AbstractProductOOO bf2 = bf.getProductOOO(); bf1.sameMethod(); bf1.doSomething(); System.out.println(); bf2.sameMethod(); bf2.doSomething(); System.out.println(); AbstractFactory gf = new GrapeFactory(); AbstractProductXXX gf1 = gf.getProductXXX(); AbstractProductOOO gf2 = gf.getProductOOO(); gf1.sameMethod(); gf1.doSomething(); System.out.println(); gf2.sameMethod(); gf2.doSomething();
※結果:
抽象產品XXX共有的方法
產品A實現抽象產品1的方法
抽象產品OOO共有的方法
產品C實現抽象產品2的方法
抽象產品XXX共有的方法
產品B實現抽象產品1的方法
抽象產品OOO共有的方法
產品D實現抽象產品2的方法
沒有留言:
張貼留言