设计模式-抽象工厂

抽象工厂模式是工厂方法模式的升级版本。若是咱们要实现的系统有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

相关文章
相关标签/搜索