Python Editor接口介绍说明

开发 后端
Python Editor接口客户必须通过它们的子类来处理某一具体类型的文档。例如,要想利用该框架来编写一个PDF文件浏览器.

Python Editor接口给出了处理所有个人信息的公共接口,其完整的代码如清单2所示。PIM通过调用getUI()方法能够获得与用户进行交互的UI组件,希望大家能够学到不少知识。

在工厂方法模式中,父类负责定义创建对象的公共接口,而子类则负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中完成,即由子类来决定究竟应该实体化哪一个类。

在简单工厂模式中,一个工厂类处于对产品类进行实例化的中心位置上,它知道每一个产品类的细节,并决定何时哪一个产品类应当被实例化。简单工厂模式的优点是能够使客户端独立于产品的创建过程。并且在系统中引入新产品时无需对客户端进行修改,缺点是当有新产品要加入到系统中时,必须对工厂类进行修改,以加入必要的处理逻辑。

简单工厂模式的致命弱点就是处于核心地位的工厂类,因为一旦它无法确定要对哪个类进行实例化时,就无法使用该模式,而工厂方法模式则可以很好地避免这一问题。考虑这样一个应用程序框架(Framework),它可以用来浏览各种格式的文档,如TXT、DOC、PDF、HTML等,设计时为了让软件的体系结构能够尽可能地通用。

定义了Application和Document这两个抽象父类,Python Editor接口客户必须通过它们的子类来处理某一具体类型的文档。例如,要想利用该框架来编写一个PDF文件浏览器,必须先定义PDFApplication和PDFDocument这两个类,它们应该分别继承于Application和Document。

Application的职责是对Document进行管理,并且在需要时创建它们,比如当用户从菜单中选择Open或者New的时候,Application就要负责创建一个Document的实例。显而易见,被实例化的特定Document子类是与具体应用相关的,因此Application无法预测哪个Document的子类将被实例化,它只知道一个新的Document何时(When)被创建。

但并不知道哪种(Which)具体的Document将被创建。此时若仍坚持使用简单工厂模式会出现一个非常尴尬的局面:框架必须实例化类,但它只知道不能被实例化的抽象类。解决的办法是使用工厂方法模式,它封装了哪一个Document子类将被创建的信息,并且能够将这些信息从框架中分离出来。

Application的子类重新定义了Application的抽象方法createDocument(),并返回某个恰当的Document子类的实例。我们称createDocument()是一个工厂方法(factory method),因为它非常形象地描述了类的实例化过程,即负责"生产"一个对象。

Python Editor接口定义了一个公共的构造性方法(builder method)getEditor(),它返回一个Editor对象,其完整的代码如清单1所示。任何一项个人信息都拥有自己独立的用户界面(Editor),负责获取数据并在需要的时候进行修改,而PIM***要做事情的只是通过Editable来获得Editor,并利用它来对用户输入的数据进行相应的操作。

【编辑推荐】

  1. 如何使Python嵌入C++应用程序?
  2. 深入探讨Ruby与Python语法比较
  3. Python学习资料介绍分享
  4. Python学习经验谈:版本、IDE选择及编码解 决方案
  5. 浅析Python的GIL和线程安全
责任编辑:chenqingxiang 来源: 博客园
相关推荐

2010-02-22 16:16:14

Python语法

2010-02-02 14:54:28

Python语法

2010-02-03 17:37:30

Python语法

2010-02-02 13:28:46

Python变量

2010-02-01 14:57:43

Python接口

2010-02-23 14:41:28

Python模块

2010-02-01 17:11:45

Python 解释器

2010-02-22 09:33:43

Python语言

2010-02-22 17:54:07

Python工具

2010-03-01 13:13:02

Python应用线程

2010-02-22 14:28:10

Python程序

2010-02-22 11:14:43

Python编写

2010-02-02 14:42:38

Python线程

2010-02-24 17:22:59

Python项目

2010-02-22 14:42:19

Python 控制语句

2010-02-24 16:44:58

Python 函数

2010-02-26 13:56:08

Python RSS

2010-03-01 18:07:53

Python语言

2010-02-22 17:46:57

Python应用程序

2010-02-01 18:23:54

Python
点赞
收藏

51CTO技术栈公众号