代理模式!
来源:互联网 发布:转手二手物品的软件 编辑:程序博客网 时间:2024/04/29 03:37
看了设计模式有一段时间了, 对面向对象技术也可以说有一定的提高吧,学到的东西总是不敢独享,拿出来与大家同乐吧(写的不好别骂我),今天要说的是代理模式,代理模式在我看
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? 参考:<
现在有一个任务就是注册用户,我们可以用普通的方法来写代码, 但是我们现在学设计模式当然就要用模式的思想了,:)
先看一下下面的这个类,这是一个抽象类(所有代码只给出示例,并非完整)
? TUser = class
? public
??? function getID(): Integer; virtual; abstract;
??? function getUserName(): string; virtual; abstract;
??? function getName(): string; virtual; abstract;
??? function getEmail(): string; virtual; abstract;
??? function getPassword(): string; virtual; abstract;
??? procedure setUserName(name: string); virtual; abstract;
??? procedure setName(name: string); virtual; abstract;
??? procedure setPassword(password: string); virtual; abstract;
??? procedure setEmail(email: string); virtual; abstract;
? end;
这个类的意思很明确:规范了用户类的接口、这里就不细说了, 下面我们来看一下这个用户类的代理类
? TUserProxy = class(TUser)
? private
??? FUser: TUser;
? public
??? function getID(): Integer; override;
??? function getUserName(): string; override;
??? function getName(): string; override;
??? function getEmail(): string; override;
??? function getPassword(): string; override;
??? procedure setUserName(name: string); override;
??? procedure setName(name: string); override;
??? procedure setPassword(password: string); override;
??? procedure setEmail(email: string); override;
??? function CheckExist(username: string);
? public
??? constructor Create(AUser: TUser); virtual;
? end
constructor TUserProxy.Create(AUser: TUser);
begin
? FUser := AUser;
end;
function TUserProxy.getEmail: string;
begin
? Result := FUser.getEmail();
end;
//etc.
unit DbUser;
interface
uses User, UserProxy, ConnectionManager, SysUtils, ADODB, DB, Forms;
const
? //////////////////////////////////////////////////////////////////////////////
? INSERT_USER = 'INSERT INTO MUser(userID, userName, name, email, password)' + ' value('
????????????? + ':userID, :userName, :name, :email, :password)';
? LOAD_USER?? = 'SELECT * FROM MUser WHERE userID =:userID';
? DELETE_USER = 'DELETE FROM MUser WHERE userID =:userID';
? UPDATE_USER = 'UPDATE MUser SET ()';
? //////////////////////////////////////////////////////////////////////////////
type
? TDbUser = class(TUser)
? private
??? FConnection: TADOConnection;
??? FADOQuery:?? TADOQuery;
? protected
??? FID: Integer;
??? FUserName: string;
??? FName: string;
??? FPassword: string;
??? FEmail: string;
? public
??? function getID(): Integer; override;
??? function getUserName(): string; override;
??? function getName(): string; override;
??? function getEmail(): string; override;
??? function getPassword(): string; override;
??? procedure setUserName(name: string); override;
??? procedure setName(name: string); override;
??? procedure setPassword(password: string); override;
??? procedure setEmail(email: string); override;
??? procedure Insert();
??? procedure SaveToDb();
??? procedure getProperty(userID: Integer);
??? constructor Create(userID: Integer; userName: string; name: string; password: string; email: string); overload;
??? constructor Create(); overload;
??? property UserName: string read getUserName write setUserName;
??? property Name: string read getName write setName;
??? property Password: string read getPassword write setPassword;
??? property Email: string read getEmail write setEmail;
? end;
这样检查用户是否已存在等逻辑就可以入到这个代理类里来实现(真实的业务逻辑有很多,不只查询用户是否存在), 而添加用户的任务就交给TDbUser类来完成即可以,这样做的好处是, 在没有代码改变的情况下进行扩展!
完 by CLH
- 代理模式--动态代理
- 代理模式-静态代理
- 代理模式-静态代理
- 代理模式 & 动态代理
- 代理模式--静态代理
- 代理模式--动态代理
- 代理模式(动态代理)
- 代理模式-动态代理
- 代理模式-动态代理
- 代理模式动态代理
- 代理模式-静态代理
- 代理模式-动态代理
- 代理模式 -动态代理
- 代理模式---动态代理
- 代理模式-动态代理
- 代理模式--静态代理
- 代理模式!
- 代理模式
- 不知大家有这种感觉没有,有时候猛然发现面前的场景和事件好像以前经历过一样
- First I get it
- C# Code Review Checklist
- [转帖】离婚了我们先同居
- 使用js脚本定时更新页面的方法
- 代理模式!
- [转帖](小说)浮生萧条
- 页码导航
- php 经典代码
- 注册了paypal!
- Regular Expression Specification
- TreeView控件的双击事件
- BQYAHOO BUG 2
- 手机上流行的各类谜语及谜底