设计模式应用场景

封装对象创建(工厂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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值