如果看了前两篇文章,这个设计模式一样很简单,上代码
/**
* 抽象工厂方法
* 在工厂方法的基础上,每个工厂实例里不止一个接口方法,而是多个
* 这样做体现了产品簇的意义,将相关的产品放在同一个工厂里
*/
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!!!