定义:
为创建一组相关或相互依赖的对象提供一组接口,而且无需指定它们的具体类。
抽象工厂模式是工厂模式的升级版本,因为它应对的是更加复杂的业务,即当有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。
由于抽象工厂类较为复杂,我觉得使用一个具体的例子,更能形象的表达这个模式的思想,而且容易理解,这里画类图就不使用通用的类图了,模拟一个跨Windows和Linux平台的产品族的生产,这里模拟的是生产记事本和画图软件,跨两个平台,可以把这个类图看成一个坐标,横轴是产品族,纵轴是产品线,工厂类生产的是具体的产品线上的产品。

实现代码如下:
public abstract class NotePadProduct {
public void shareMethod(){
System.out.println("windows share method");
}
public abstract void doSomething();
}public class NotePadWin extends NotePadProduct {
@Override
public void doSomething() {
System.out.println("windows notepad");
}
}public class NotePadLinux extends NotePadProduct {
@Override
public void doSomething() {
System.out.println("linux notepad");
}
}public abstract class DrawPictureProduct {
public void shareMethod(){
System.out.println("linux share method");
}
public abstract void doSomething();
}public class DrawPictureWin extends DrawPictureProduct {
@Override
public void doSomething() {
System.out.println("windows draw picture");
}
}public class DrawPictureLinux extends DrawPictureProduct {
@Override
public void doSomething() {
System.out.println("linux draw picture");
}
}
public abstract class AbstractFactory {
public abstract NotePadProduct createNotePad();
public abstract DrawPictureProduct createDrawPicture();
}
public class WindowsFactory extends AbstractFactory {
@Override
public DrawPictureProduct createDrawPicture() {
return new DrawPictureWin();
}
@Override
public NotePadProduct createNotePad() {
return new NotePadWin();
}
}public class LinuxFactory extends AbstractFactory {
@Override
public DrawPictureProduct createDrawPicture() {
return new DrawPictureLinux();
}
@Override
public NotePadProduct createNotePad() {
return new NotePadLinux();
}
}抽象工厂模式优点:
1、封装性,工厂类,只知道工厂类是谁,就能创造一个需要的对象,不需要关心具体的实现类。
抽象工厂模式的缺点:
最大缺点就是产品族的扩展非常困难。每增加一个产品,抽象工厂类要修改,其实现类也要修改,严重违反了开闭原则。
本文深入探讨了抽象工厂模式的概念及其在创建跨Windows和Linux平台产品的复杂业务场景中的应用。通过具体代码实例,展示了如何利用抽象工厂模式生成不同产品族和产品线上的具体产品,同时阐述了其优点和主要缺点,特别是如何在不修改产品族和实现类的情况下灵活地生成所需对象。
5548

被折叠的 条评论
为什么被折叠?



