Python设计模式系列之三: 创建型Factory Method模式
2007-03-30 12:55:15 来源:WEB开发网当创建对象的职责被委托给多个帮助子类(helper subclass)中的某一个,并且希望将哪个子类是代理者这一信息局部化的时候。
需要说明的是,使用工厂方法模式创建对象并不意味着一定会让代码变得更短(实事上往往更长),并且可能需要设计更多的辅助类,但它的确可以灵活地、有弹性地创建尚未确定的对象,从而简化了客户端应用程序的逻辑结构,并提高了代码的可读性和可重用性。
二、模式引入
工厂方法这一模式本身虽然并不复杂,但却是最重要的设计模式之一,无论是在COM、CORBA或是EJB中,都可以随处见到它的身影。面向对象的一个基本思想是在不同的对象间进行责权的合理分配,从本质上讲,工厂方法模式是一种用来创建对象的多态方法(polymorphic method),它在抽象父类中声明用来创建对象的方法接口,而具体子类则通过覆盖该方法将对象的创建过程局部化,包括是否实例化一个子类,以及是否对它进行初始化等等。从某种程度上说,工厂方法可以看成是构造函数的特殊化,其特殊性表现在能够用一致的方法来创建不同的对象,而不用担心当前正在对哪个类进行实例化,因为究竟创建哪个类的对象将取决于它的子类。
假设我们打算开发一个用于个人信息管理(Personal Information Manager,PIM)的软件,它可以保存日常工作和生活中所需的各种信息,包括地址本、电话簿、约会提醒、日程安排等等。很显然,PIM用户界面(User Interface)的设计将是比较复杂的,因为必须为每种信息的输入、验证和修改都提供单独的界面,以便同用户进行交互。比较简单的做法是在PIM中为各种信息的处理编写相应的用户界面,但代价是将导致软件的可扩展性非常差,因为一旦今后要加入对其他信息(比如银行帐户)进行管理的功能时,就必须对PIM进行修改,添加相应的用户界面,从而最终导致PIM变得越来越复杂,结构庞大而难以维护。改进的办法是将处理各种信息的用户界面从PIM中分离出来,使PIM不再关心用户如何输入数据,如何对用户输入进行验证,以及用户如何修改信息等,所有的这些都交由一个专门的软件模块来完成,而PIM要做的只是提供一个对这些个人信息进行管理的总体框架。
更多精彩
赞助商链接