Java设计模式之抽象工厂模式
针对工厂方法的问题,当有多个产品等级时(食物、饮料、甜品。。。) 工厂类就会很多。抽象工厂模式对该问题进行了优化。
抽象工厂的优点:
- 仍然有工厂模式和简单工厂模式的优点。
- 抽象工厂把工厂类的数量减少了,无论有多少个产品等级,工厂就一套。
抽象工厂的缺点:
- 当产品等级(食物、饮料)发生变化时(增加产品等级,删除产品等级),都要引起以前工厂代码的修改(动一发牵全局),违反了ocp原则。
当产品等级比较固定时,可以使用抽象工厂。
package com.fjh.factory.simplefactory.abstractfactory;
interface Food{
void eat();
}
interface Drink{
void drink();
}
class Hamburger implements Food {
@Override
public void eat() {
System.out.println("吃汉堡");
}
}
class Cola implements Drink{
@Override
public void drink() {
System.out.println("喝可乐");
}
}
interface Factory{
Food getFood();
Drink getDrink(); //与工厂方法的最大区别之处(多个产品等级),因此得名抽象工厂。
}
class KFCFactory implements Factory {
@Override
public Food getFood() {
return new Hamburger();
}
@Override
public Drink getDrink() {
return new Cola();
}
}
class Rise implements Food {
@Override
public void eat() {
System.out.println("吃饭");
}
}
class XueBi implements Drink{
@Override
public void drink() {
System.out.println("喝雪碧");
}
}
class MFactory implements Factory {
@Override
public Food getFood() {
return new Rise();
}
@Override
public Drink getDrink() {
return new XueBi();
}
}
public class AbstractFactory {
public static void main(String[] args){
KFCFactory kfcFactory = new KFCFactory();
Food food1 = kfcFactory.getFood();
Drink drink1 = kfcFactory.getDrink();
food1.eat();
drink1.drink();
}
}

浙公网安备 33010602011771号