設計模式-抽象工廠

抽象工廠模式是工廠方法模式的升級版本。若是咱們要實現的系統有N個產品族,每一個產品族有M種產品,那麼就可使用抽象工廠模式。java

如圖所示,水果有高等、低等。玩具備高等低等ide

因此咱們去送禮物時(包含水果和玩具).也有高等和低等ui

public interface Fruit {
    /**
     * 建立水果
     * @return
     */
    Fruit createFruit();

    /**
     * 水果名稱
     */
    void getName();
}

public class GdFruit implements Fruit{
    @Override
    public Fruit createFruit() {
        return new GdFruit();
    }

    @Override
    public void getName() {
        System.out.println("我是高端水果");
    }
}


public class DdFruit implements Fruit{
    @Override
    public Fruit createFruit() {
        return new DdFruit();
    }

    @Override
    public void getName() {
        System.out.println("我是低端水果");
    }
}
public interface Toy {
    /**
     * 建立玩具
     * @return
     */
    Toy createToy();

    /**
     * 獲取玩具名
     */
    void getName();
}
public class GdToy implements Toy{
    @Override
    public Toy createToy() {
        return new GdToy();
    }

    @Override
    public void getName() {
        System.out.println("我是高端玩具");
    }
}
public class DdToy implements Toy{
    @Override
    public Toy createToy() {
        return new DdToy();
    }

    @Override
    public void getName() {
        System.out.println("我是低端玩具");
    }
}
public interface Gift {
    /**
     * 建立水果
     * @return
     */
    Fruit createFruit();

    /**
     * 建立玩具
     * @return
     */
    Toy createToy();
}

public class GdFactory implements Gift{

    @Override
    public Fruit createFruit() {
        return new GdFruit();
    }

    @Override
    public Toy createToy() {
        return new GdToy();
    }
}

public class DdFactory implements Gift{

    @Override
    public Fruit createFruit() {
        return new DdFruit();
    }

    @Override
    public Toy createToy() {
        return new DdToy();
    }
}
public class Demo {
    public static void main(String[] args) {
        Gift gift = new GdFactory();
        Fruit fruit = gift.createFruit();
        Toy toy = gift.createToy();
        System.out.println("送禮物來了");
        fruit.getName();
        toy.getName();
    }
}

控制檯console:code

    送禮物來了
    我是高端水果
    我是高端玩具get

若是後面咱們還要加中端禮物的話,那麼能夠無縫的進行拓展了產品

但也是缺點,就是會略顯臃腫it

相關文章
相關標籤/搜索