1介紹
在上一講工廠方法模式中我們發(fā)現(xiàn)賣水果現(xiàn)在特別火,于是我們也決定加盟個水果店賣水果嚼酝。這樣抽象工廠模式就誕生了浮还。
抽象工廠模式:該模式是創(chuàng)建型模式的一種。抽象工廠模式是工廠方法模式的升級版闽巩,抽象工廠模式是創(chuàng)建不同的工廠钧舌,不同的工廠再去創(chuàng)建具體產(chǎn)品。
抽象工廠模式一般也有四種角色:抽象工廠涎跨、具體工廠延刘、抽象產(chǎn)品和具體產(chǎn)品六敬。
2 實現(xiàn)
第一步:創(chuàng)建工廠接口
FruitFactory.class
public interface FruitFactory {
public Fruit getApple();
public Fruit getBanana();
}
第二步:創(chuàng)建具體工廠
FactoryA.class / FactoryB.class
public class FactoryA implements FruitFactory {
@Override
public Fruit getApple() {
return new FactoryAApple();
}
@Override
public Fruit getBanana() {
return new FactoryABanana();
}
}
public class FactoryB implements FruitFactory {
@Override
public Fruit getApple() {
return new FactoryBApple();
}
@Override
public Fruit getBanana() {
return new FactoryBBanana();
}
}
第三步:創(chuàng)建產(chǎn)品接口
Fruit.class
public interface Fruit {
public void get();
}
第四步:創(chuàng)建產(chǎn)品抽象類
Apple.class / Banana.class
public abstract class Apple implements Fruit{
public abstract void get();
}
public abstract class Banana implements Fruit{
public abstract void get();
}
第五步:創(chuàng)建具體產(chǎn)品類
FactoryAApple.class / FactoryABanana.class / FactoryBApple.class / FactoryBBanana.class
public class FactoryAApple extends Apple{
@Override
public void get() {
System.out.println("工廠 A 生產(chǎn)蘋果");
}
}
public class FactoryABanana extends Apple{
@Override
public void get() {
System.out.println("工廠 A 生產(chǎn)香蕉");
}
}
public class FactoryBApple extends Apple{
@Override
public void get() {
System.out.println("工廠 B 生產(chǎn)蘋果");
}
}
public class FactoryBBanana extends Apple{
@Override
public void get() {
System.out.println("工廠 B 生產(chǎn)香蕉");
}
}
第六步:測試
MainClass.class
public class MainClass {
public static void main(String[] args) {
//創(chuàng)建FactoryA工廠
FruitFactory factory = new FactoryA();
//生產(chǎn)蘋果
Fruit apple = factory.getApple();
apple.get();
//生產(chǎn)香蕉
Fruit banana = factory.getBanana();
banana.get();
}
}

運行結(jié)果
抽象工廠模式相對于工廠方法模式來說,其可以實現(xiàn)多個具體工廠的產(chǎn)生驾荣,每個工廠都可以生產(chǎn)相應(yīng)的產(chǎn)品外构。而工廠方法模式只能是一個具體的工廠普泡。當(dāng)抽象工廠模式中只剩下一個具體的工廠時便變成了工廠方法模式,兩者之間是可以轉(zhuǎn)換的审编,但他們的目的都是為了降低耦合度撼班。