抽象工厂模式是对工厂方法模式的改进:在工厂方法模式中,如果增加了新的产品那么就必须进入到工厂中去添加新的方法来产生新的产品,这样的方式对代码开发不是很友好。而抽象工厂模式就不同,在增加了新的产品以后,只需要再写一个相应的工厂即可。
package mode.abstract_factory;
/*抽象的水果工厂*/
public interface AbstractFruitFactory {
public Fruit getFruit();
}
package mode.abstract_factory;
/*抽象的水果工厂*/
public interface AbstractFruitFactory {
public Fruit getFruit();
}
package mode.abstract_factory;
/*苹果*/
public class Apple implements Fruit {
@Override
public void eat() {
System.out.println("吃苹果");
}
}
package mode.abstract_factory;
/**苹果工厂*/
public class AppleFactory implements AbstractFruitFactory {
@Override
public Fruit getFruit() {
return new Apple();
}
}
有了这个苹果工厂,我们就可以生产我们的苹果了,但是现在我们有引入了一种橘子的产品
package mode.abstract_factory;
/**橘子*/
public class Orange implements Fruit {
@Override
public void eat() {
System.out.println("吃橘子");
}
}
要生产橘子,那么就建立一个橘子工厂
package mode.abstract_factory;
/**橘子工厂*/
public class OrangeFactory implements AbstractFruitFactory {
@Override
public Fruit getFruit() {
return new Orange();
}
}
有了这个橘子工厂我们就可以生产橘子了,这里我们并没去修改原来的工厂,而是增加了新的工厂。这样新建独立的新类的模式要比在源代码中修改其他类要好很多。