设计模式-抽象工厂方法

如果看了前两篇文章,这个设计模式一样很简单,上代码

/**
 * 抽象工厂方法
 * 在工厂方法的基础上,每个工厂实例里不止一个接口方法,而是多个
 * 这样做体现了产品簇的意义,将相关的产品放在同一个工厂里
 */
public class Main {

    public static void main(String[] args) {

        IAnimalFactory blackAnimalFactory = new BlackAnimalFactory();
        ICat blackCat = blackAnimalFactory.createCat();
        blackCat.eat();
        IDog blackDog = blackAnimalFactory.createDog();
        blackDog.eat();

        IAnimalFactory whiteAnimalFactory = new WhiteAnimalFactory();
        ICat whiteCat = whiteAnimalFactory.createCat();
        whiteCat.eat();
        IDog whiteDog = whiteAnimalFactory.createDog();
        whiteDog.eat();

    }

}

public interface ICat {
    void eat();
}

public interface IDog {
    void eat();
}

public class BlackCat implements ICat {
    public void eat() {
        System.out.println("The black cat is eating!");
    }
}

public class BlackDog implements IDog {
    public void eat() {
        System.out.println("The black dog is eating!");
    }
}

public class WhiteCat implements ICat {
    public void eat() {
        System.out.println("The white cat is eating!");
    }
}

public class WhiteDog implements IDog {
    public void eat() {
        System.out.println("The white dog is eating!");
    }
}

public interface IAnimalFactory {

    ICat createCat();

    IDog createDog();
}

public class BlackAnimalFactory implements IAnimalFactory {

    @Override
    public ICat createCat() {
        return new BlackCat();
    }

    @Override
    public IDog createDog() {
        return new BlackDog();
    }
}

public class WhiteAnimalFactory implements IAnimalFactory {

    @Override
    public ICat createCat() {
        return new WhiteCat();
    }

    @Override
    public IDog createDog() {
        return new WhiteDog();
    }

}

用法:
工厂方法里每个工厂就生产一个产品,扩展一下,生产多个产品,这就是抽象工厂了,这里也就是涉及了一个产品簇的概念了。
换一个工厂就换一整套实现,一整套实现替换的代码场景太多了,仔细想想是不是这么回事,如果想不到的慢慢想,总有想通的时候。
另外说一句,设计模式里大量用到了接口,很多初学者看的一头雾水,其实设计模式总归一句话,如何使用接口,over!!!

猜你喜欢

转载自blog.csdn.net/u013246891/article/details/81511016