封装对象创建(工厂3兄弟模式,单例模式)
封装调用(命令模式)
封装算法(装饰者模式)
封装算法块(模板方法模式)
封装命令(命令模式)
搜索关键字:android SDK 模式设计 可以看见很多设计模式的用法
1.策略模式(Strategy)
应用场景
1)、 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。(例如FlyBehavior和QuackBehavior) 2)、 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。(例如FlyBehavior和QuackBehavior的具体实现可任意变化或扩充) 3)、 对客户(Duck)隐藏具体策略(算法)的实现细节,彼此完全独立。
体现原则:针对接口编程,不针对实现编程(行为来自超类的具体实现,或是继承某个接口并由子类自行实现而来。这两种做法都是依赖于“实现”);封装变化
2 观察者模式
应用场景:
1)、 对一个对象状态的更新,需要其他对象同步更新,而且其他对象的数量动态可变。
2)、 对象仅需要将自己的更新通知给其他对象而不需要知道其他对象的细节。
体现原则:为交互对象之间的松耦合设计而努力
3.装饰者模式
装饰者模式的应用场景:
1)、 想透明并且动态地给对象增加新的职责的时候。
2)、 给对象增加的职责,在未来存在增加或减少可能。
单例模式(singleton)
所谓单例就是系统中只能存在某个类的一个实例,在现实中只能存在一个实例的对象是很常见的,比如系统配置对象只能有一个,
比如一个客户端同服务器的TCP/IP连接经常只允许有一个连接等等。
实现原理
那么如何保证在系统中每时每刻只有一个类的实例存在呢,这可以通过静态变量来实现,在调用GetInstance时判断静态变量是否为nil,
如果为nil表示系统中没有类的实例,则构造对象,同时将类实例赋值给静态变量,如果不为nil,则直接返回静态变量对应的类的实例
实现例子:TGlobDM
TGlobDM提供给外部的接口:构造器、析构器,测试是否连接上数据库的方法,构造和释放实例的类方法
类内方法的调用关系:
Instance--AccessInstance{根据传入的请求整数返回TGlobDM实例:1,TGlobDM实例,才有下面的;其他,nil}----CreateInstance---inherited Create(nil);
public
constructor Create; reintroduce; {re重复 Create和祖先类的方法同名,重新声明这个方法}
destructor Destroy; override;
function DBConnect: boolean; {测试是否连接上数据库}
class function Instance: TGlobDM; {TGlobDM的实例,得到结果是一个指向TGlobDM实例的指针或nil}
class procedure ReleaseInstance;
published
property DBType: TDBType read GetDbType;
property AdoHost: string read FAdoHost write SetAdoHost;
property AdoPort: Integer read FAdoPort write SetAdoPort;
property AdoDbId: Integer read FAdoDbId write SetAdoDbId;
property AdoType: TDBType read FAdoType write SetAdoType;
property ConnStr: string read FConnStr write SetConnStr;
property ConnMode: Integer read FConnMode write SetConnMode;
end;
代码实际调用:
procedure TfrmLogin.btnOkClick(Sender: TObject);
begin
...
if not Assigned(GlobDM) then GlobDM := TGlobDM.Create;
if GlobDM.aConnMain.Connected then GlobDM.aConnMain.Connected := False;
if not GlobDM.DBConnect then
begin
pdMsgOK('与服务器连接失败!'+#13
+'可能是你的电脑没有连接到专用网。'+#13
+'或是配置连接数据库的连接字符串(tnsnames.ora)有问题。'+#13
+'请检查!');
Exit;
end;
...
end;
//传入连接字符串创建
constructor TAdodsOp.Create(AsConnStr: string);
begin
inherited create;
FGlobalDM := TGlobDM.Instance;
FGlobalDM.aConnMain.ConnectionString := AsConnStr;
FGlobalDM.ConnStr := AsConnStr;
FGlobalDM.DBConnect;
FDBType := FGlobalDM.DbType;
end;