對象模式所屬類別簡介
接口隔離模式包括:facade、proxy、adapter、mediator
採用一層隔離層來解決類之間錯亂依賴。
當前模式簡介動機
在面向對象系統中,有些對象由於某種原因(比如創建開銷大),直接使用不合適。
增加一層代理來使用。
需求
調用Func函數,來實現細節。
設計一
#include "stdafx.h"
#include <iostream>
using namespace std;
class ISubject
{
public:
virtual void Func() = 0;
};
class RealSbuject:public ISubject
{
public:
virtual void Func(){ std::cout << "RealSbuject" << std::endl; }
};
class ClientApp
{
public:
ISubject *m_obj;
ClientApp()
{
m_obj = new RealSbuject;
}
void DoTask()
{
m_obj->Func();
}
};
int main() //調用
{
ClientApp test;
test.DoTask();
return 0;
}
需求更改
設計一更改版本
違反原則
設計二
#include "stdafx.h"
#include <iostream>
using namespace std;
class ISubject
{
public:
virtual void Func() = 0;
};
class RealSubject:public ISubject
{
public:
virtual void Func(){ std::cout << "RealSubject" << std::endl; }
};
class SubjectProxy:public ISubject
{
public:
virtual void Func()
{
RealSubject t;
t.Func();
}
};
class ClientApp
{
public:
ISubject *m_obj;
ClientApp()
{
m_obj = new SubjectProxy;
}
void DoTask()
{
m_obj->Func();
}
};
int main() //調用
{
ClientApp test;
test.DoTask();
return 0;
}
設計二更改版本
設計二比設計一區別
多了一層代理,設計一直接調用,設計二在代理類調用
模式定義
爲其他對象提供一種代理以控制(隔離,使用接口)對這個對象的訪問。
模式結構
要點總結
用於無法直接new的情況,增加代理。