如果看了前兩篇文章,這個設計模式一樣很簡單,上代碼
/**
* 抽象工廠方法
* 在工廠方法的基礎上,每個工廠實例裏不止一個接口方法,而是多個
* 這樣做體現了產品簇的意義,將相關的產品放在同一個工廠裏
*/
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!!!