Delphi的接口实现了基于引用计数的实例内存管理,
字符串和动态数组也实现了自动内存管理的功能
Delphi的对象不允许在栈中创建,
但在堆中创建的对象,和C++中的内存管理差不多,都不能自动管理
如果想使用自动管理,可以考虑使用接口
关于接口是对象的说法,确实敢于打破常规,
但是,你看到他们之间的共同点时,
也不要忽略他们之间的差别
对象是类的实例,接口变量是一个接口的实例
接口必须被类实现,伴随着类的实例化,
接口也被实例化
在C++中,接口也是一个普通的类,但一般定义为抽象类
Delphi不支持多继承,但支持实现多个接口,
在使用接口变量时,也许你觉得和使用对象变量没有什么区别,
但是,要记住, 接口是对象之间的调用协议
关于VCL中涉及到的一些设计模式,简单的提一下,
Builder:
每个窗体根据.dfm被创建的过程,在创佳时都是一样的,
TReader
TWriter 是负责反向操作的
这是Delphi可视化得以实现的基础
FACTORY METHOD:
例子类:
TTreeView
function CreateNode: TTreeNode;
virtual;
function CreateNodes: TTreeNodes;
virtual;
TListView:
function CreateListItem: TListItem;
virtual;
function CreateListItems: TListItems;
virtual;
function CreateBlobStream(Field: TField;
Mode: TBlobStreamMode): TStream;
virtual;
TServerSocket 创建客户端Socket的方法
function GetClientSocket(Socket: TSocket): TServerClientWinSocket;
dynamic;
function GetServerThread(ClientSocket: TServerClientWinSocket): TServerClientThread;
dynamic;
PROTOTYPE:
function CloneConnection: TSQLConnection;
SINGLETON:
这个太多了,
TApplication,TScreen,TPrinter
Adapter:
TStreamAdapter
Bridge:
TPicture
FLYWEIGHT:
TField
Mediator:
TForm 的继承类通常充当这个角色
Memento:
TRecall
Observer:
DataControls
TDataSource
模板方法:
TDataSet
这几个只是早期delphi中的几个例子,
当时设计模式还没有人谈论,
当你看一些第三方的类库的时候,
会发现使用了更多的设计模式,
如: SQLDirect ICS FastReport 等
据说WebSnap中使用了大量的设计模式,
有兴趣的话,你可以研究一下
但事实上WebSnap并不好用,
大家更喜欢其它的Web开发类库,
设计的如此优秀的东西,却并不被大众接受
因为事件委托可以使问题简单化,
而不需要设计模式就可以解决很多设计模式中的问题,
需要的时候才使用,才是对待设计模式的正确态度