設計模式(十四)——接口隔離模式-proxy

對象模式所屬類別簡介

接口隔離模式包括: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的情況,增加代理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章