在面向对象的程序设计中,某一功能的实现往往是依赖多个类的协同工作,这当中不必可避免的会有一个核心的关键类,非关键类对关键类的依赖程度比较高(耦合比较紧),关键类的变动会景响到非关键类与其通信。比如在某个MIS系统中,用户数据是存储在文件中的,那么所有数据的读取与保存都依赖与那和与文件进行通信的类。突然某一天客户说要将数据存储到数据库中,那么我们是必要找出所有使用这些与文件通信的类的代码,并使用新写的与数据库通信的类将其替换掉。这个改动量是可想而知的。那么有没有一种好的设计模式能够降低这种情况下的代码改动量呢?
答案是肯定的。使用工厂模式。我们可以定义一个工厂类,提供一系列的创造对象的方法,代替类似TObject.Create的代码,降低类与类之间的耦合。
我们就以前面讲到的情况为例,来说明工厂模式的使用。在系统中我们已经定义了一个负责数据读取的抽像类TDataReader和负责数据保存的抽象类TDataWriter,并分别派生了文件读取类TFileDataReader和文件保存类TFileDataWriter。
type
TDataReader=class
private
.......
protected
.......
public
.......
procedureRead;virtual;abstract;
.......
end;
TDataWriter=class
private
.......
protected
.......
public
.......
procedureWrite;virtual;abstract;
.......
end;
TFileDataReader=class(TDataReader)
private
.......
protected
.......
public
.......
procedureRead;override;
.......
end;
TFileDataWriter=class(TDataWriter)
private
.......
protected
.......
public
.......
procedureWrite;override;
.......
end;
在重构这前,凡是用到数据读取与保存的地方,都是使用类似下面的代码
Reader:TFileDataReader;
begin
......
Reader:=TFileDataReader.Create;
Reader.Read;
......
end;
var
Writer:TFileDataWriter;
begin
......
Writer:=TFileDataWriter.Create;
Writer.Write;
......
end;
现在客户要求我们将所有的数据存储到数据库中,就意味着我们要再分别从TDataReader类和TDataWriter类派生出两个与数据库通信的类TDBDataReader和TDBDataWriter(之前良好的类继承设计使我们在此省下了许多修工作),然后将类似上面的的Reader和Writer的构建语句改为
Writer:=TDBDataWriter.Create;
这样的改动也能达到客户的要求,但我们谁也不能保证在此之后不会再有任何的变化,为了不让噩梦重演,我们决定不使用这种修改方式。而是定义一个工厂类,负责创建出我们需要的数据读取类和保存类,即使将来再有变化,我们的修改也仅限于在工厂类内部的改动。
TDataReaderFactory=class
public
functionCreatReader:TDataReader;
end;
TDataWriterFactory=class
public
functionCreateWriter:TDataWriter;
end;
implementation
{TDataReaderFactory}
functionTDataReaderFactory.CreatReader:TDataReader;
begin
Result:=TDBDataReader.Create;
end;
{TDataWriterFactory}
functionTDataWriterFactory.CreateWriter:TDataWriter;
begin
Result:=TDBDataWriter.Create;
end;
在使用到数据读写类的地方,将代码改为
Writer:=TDataWriterFactory.CreateWriter;
至此,我们就通过工厂模式实现了客户端代码与数据存取类的松散耦合,也为将来的再修改提供了灵活性。
版权声明:本文为博主原创文章,未经博主允许不得转载。
相关推荐
模式编程是软件工程中的一种最佳实践,它通过使用预定义的解决方案模板来解决常见设计问题。在Delphi中,模式编程可以帮助开发者构建更加灵活、可扩展和可维护的系统。 1. **单例模式**: 单例模式确保一个类只有...
type TIProduct = class str:string; function Print():string;virtual; end; type TProduct_A = class(TIProduct) private public function Print():string;override; end; type TProduct_B = class...
设计模式是软件工程中的一个重要概念,它总结了在特定情境下解决问题的常见方法,使得开发者能够利用前人的经验,提高代码的可读性、可维护性和复用性。这本书的内容质量很高,对于深入理解Delphi编程和提升软件设计...
模式编程是软件工程中的一种设计方法,旨在通过复用已验证的解决方案来解决常见的设计问题。Delphi模式编程则是指在Delphi环境下应用这些模式来进行高效、可维护性高的软件设计与开发。Delphi模式编程强调代码的结构...
这些设计模式都是软件工程中的宝贵工具,能够提高代码的可读性、可维护性和可扩展性。了解并熟练运用这些模式,能够帮助Delphi开发者构建更加健壮和易于维护的系统。在实际项目中,根据需求选择合适的设计模式,可以...
设计模式是软件工程中的一个重要概念,它们代表了在特定上下文中解决常见问题的最佳实践。这些模式是经验丰富的开发人员在长时间实践中总结出的解决方案模板,旨在提高代码的可读性、可维护性和可复用性。 Delphi...
本资料将深入探讨Delphi中的设计模式及其应用。 1. **单例模式**:单例模式确保一个类只有一个实例,并提供全局访问点。在Delphi中,可以使用Singleton接口或静态变量来实现。这种模式常用于配置管理、日志记录等...
在软件开发中,设计模式是解决常见问题的经过验证的解决方案,它们代表了最佳实践,并且在各种编程语言中都有应用,包括Delphi。本示例将深入探讨如何在Delphi中实现和利用设计模式。 1. **单例模式**:单例模式...
在Delphi中,工厂模式可以帮助我们隐藏对象创建的细节,使得代码更易于维护和扩展。 2. 单例模式:确保一个类只有一个实例,并提供一个全局访问点。在Delphi中,单例模式常用于管理资源,如数据库连接或配置对象,...
设计模式是软件工程中的一种重要思想,它是在特定情境下,为解决常见问题而提出的一套最佳实践。在面向对象编程领域,设计模式是经验的结晶,能够帮助开发者设计出可扩展、可维护的高质量软件。Delphi作为一款强大的...
Delphi模式编程是软件开发领域中的一个重要概念,尤其在面向对象的设计和实现中扮演着关键角色。Delphi,作为一款强大的RAD(快速应用开发)工具,以其高效的编译器和直观的可视化界面设计而闻名。它支持Object ...
以上只是一部分常见的设计模式,实际上还有许多其他模式,如命令模式、迭代器模式、桥接模式等,都可以在Delphi编程中找到应用场景。理解并熟练应用这些设计模式,将极大地提升Delphi开发的效率和质量。 文件...
书中的重点之一可能是对Gang of Four(GoF)23种经典设计模式的讲解,如工厂模式、单例模式、建造者模式、原型模式、适配器模式、装饰器模式、桥接模式、组合模式、装饰模式、代理模式、命令模式、责任链模式、解释...
第2章 Delphi的模式编程机制 2.1 对象模型机制 2.1.1 对象模型 2.1.2 对象建模和模式编程 2.1.3 对象关系与复用 2.2 动态绑定机制 2.2.1 方法绑定 2.2.2 虚方法 2.2.3 多态 2.3 类型转换机制 2.3.1 类型 ...
设计模式是软件工程中经过验证的、在特定情境下解决问题的通用解决方案,它们是经验的结晶,可以提高代码的复用性和可读性。Delphi模式编程的核心思想就是将这些模式应用到Delphi的开发实践中,使代码更加规范、易于...
这些模式是设计模式中的冰山一角,它们为开发人员提供了在各种情况下的标准解决方案。通过深入理解和熟练运用这些模式,你可以编写出更优雅、更具扩展性的Delphi代码。刘艺的"Delphi模式编程"光盘源码提供了一个实践...
本书涵盖了多种经典的设计模式,包括创建型模式(如单例模式、工厂方法模式、抽象工厂模式)、结构型模式(如适配器模式、装饰器模式、代理模式、桥接模式、组合模式、外观模式、享元模式)以及行为型模式(如策略...
《Delphi模式编程》是一本深入探讨面向对象设计模式在Delphi编程中的应用书籍。配书光盘包含的源码提供了丰富的实例,帮助读者更好地理解和实践各种设计模式。以下是这些模式的基本介绍及其在Delphi开发中的重要性:...