设计模式学习笔记(五)—Abstract Factory抽象工厂模式
GOF《设计模式》一书对Abstract Factory模式是这样描述的:
为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类。
大致意思是说:我们在创建这些对象的时候,并不需要指定它们的具体类,这些具体类的对象是由工厂对象负责实例化的。下面是《Design Patterns Explained》一书的例子,有关计算机系统的显示和打印程序,用来显示和打印的分辨率取决于当前运行的系统。低端机使用低分辨率的显示和打印驱动程序,高端机使用高分辨率的显示和打印驱动程序。其结构图如下:
代码如下:
abstract class ResFactory{ abstract public DisplayDriver getDisplayDrvr(); abstract public PrintDriver getPrintDrvr();}class LowResFact extends ResFactory{ public DisplayDriver getDisplayDrvr() { returnnew LRDD(); } public PrintDriver getPrintDrvr() { returnnew LRPD(); } }class HighResFact extends ResFactory{ public DisplayDriver getDisplayDrvr() { returnnew HRDD(); } public PrintDriver getPrintDrvr() { returnnew HRPD(); } }abstract class DisplayDriver{ }abstract class PrintDriver{ }class HRDD extends DisplayDriver{ public HRDD() { System.out.println("使用高端机的显示驱动程序") } }class LRDD extends DisplayDriver{ public LRDD(){ System.out.println("使用低端机的显示驱动程序"); } }class HRPD extends PrintDriver{ public HRPD() { System.out.println("使用高端机的打印驱动程序"); } }class LRPD extends PrintDriver{ public LRPD() { System.out.println("使用低端机的打印驱动程序"); } }public class ApControl { public static ResFactory getResFactory(ResFactory factory){ return factory; } public static void main(String[] args) { ResFactory highResFact=ApControl.getResFactory(new HighResFact()); highResFact.getDisplayDrvr(); highResFact.getPrintDrvr(); ResFactory lowResFact=ApControl.getResFactory(new LowResFact()); lowResFact.getDisplayDrvr(); lowResFact.getPrintDrvr(); }