天天看点

Design Pattern: Abstract Factory 模式

假设您要制作一个对话方块(dialog)元件,您希望的是这个对话方块可以有不同的视感(look-and- feel),最基本的想法是,藉由setter将不同视感的元件设定给这个对话方块,例如:

customdialog.java

很简单,这是最基本的介面依赖,setter依赖于ibutton与itextfield两个介面,而不是其实作类别,不过这边还有个进一步的要求,使用 上面的方式还必须亲自呼叫setter、layout等方法,您希望视感的更换可以更简单些,例如只要透一个元件的替换就可以完成对话方块上所有元件的视 感更换。 

您可以使用abstract factory模式,将所有对话方块所需要的产生的元件加以封装,对话方块依赖于abstract factory,实际上具体的factory实现则分别产生对话方块所需要的视感元件

现在如果要更换所有的视感元件,就只要抽象掉具体的factory就可以了,例如:

customdialog windowsdialog = 

      new customdialog(new windowswidgetfactory()); 

windowsdialog.showdialog(); 

customdialog macdialog = 

      new customdialog(new macwidgetfactory()); 

macdialog.showdialog();

来将上面的uml图具体实现出来。

ibutton.java

itextfield.java

iwidgetfactory.java

macbutton.java

windowsbutton.java

mactextfield.java

windowstextfield.java

macwidgetfactory.java

windowswidgetfactory.java

简单的说,在abstract factory模式中将具体的product封装在具体factory实现中,而客户仍只要面对factory与product的抽象介面,避免依赖于具 体的factory与product,由于factory封装了所必须的product,所以要更换掉所有的元件,只要简单的抽换掉factory就可以 了,不用修改客户端的程式。

继续阅读