Core Design Patterns(2) Proxy 代理模式
VS 2008
代理模式使得我们可以通过引入一个代理对象来控制另一对象的创建及访问。
1. 模式静态类图
2. 应用
现在有一个用于应用程序写文本日志的组件,创建这个组件的一个实例的时候,需要告诉它当前应用程序的名称,组件根据不同的应用程序做不同的处理(如,不同的应用程序写文本日志到不同文件夹),现在,我建立了一个应用程序,使用这个组件来写文本日志,但是如果每次写文本日志都要告诉它应用程序名,那不是太麻烦了,所以引入一个代理类,来负责该组件的创建。
ITextLog
TextLog
TextLogProxy
Client
代理模式使得我们可以通过引入一个代理对象来控制另一对象的创建及访问。
1. 模式静态类图
2. 应用
现在有一个用于应用程序写文本日志的组件,创建这个组件的一个实例的时候,需要告诉它当前应用程序的名称,组件根据不同的应用程序做不同的处理(如,不同的应用程序写文本日志到不同文件夹),现在,我建立了一个应用程序,使用这个组件来写文本日志,但是如果每次写文本日志都要告诉它应用程序名,那不是太麻烦了,所以引入一个代理类,来负责该组件的创建。
ITextLog
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DesignPattern.Proxy.BBL {
interface ITextLog {
void Write(string message);
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DesignPattern.Proxy.BBL {
interface ITextLog {
void Write(string message);
}
}
TextLog
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DesignPattern.Proxy.BBL {
class TextLog : ITextLog {
private string appName = string.Empty;
public TextLog(string appName) {
this.appName = appName;
}
ITextLog Members
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DesignPattern.Proxy.BBL {
class TextLog : ITextLog {
private string appName = string.Empty;
public TextLog(string appName) {
this.appName = appName;
}
ITextLog Members
}
}
TextLogProxy
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DesignPattern.Proxy.BBL {
class TextLogProxy : ITextLog {
ITextLog textLog = null;
private ITextLog GetTextLog() {
if (textLog == null) {
textLog = new TextLog("BoroughGridService");
}
return textLog;
}
ITextLog Members
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DesignPattern.Proxy.BBL {
class TextLogProxy : ITextLog {
ITextLog textLog = null;
private ITextLog GetTextLog() {
if (textLog == null) {
textLog = new TextLog("BoroughGridService");
}
return textLog;
}
ITextLog Members
}
}
Client
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DesignPattern.Proxy.BBL;
namespace DesignPattern.Proxy {
class Program {
static void Main(string[] args) {
ITextLog textLog = new TextLogProxy();
textLog.Write("this is a message");
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DesignPattern.Proxy.BBL;
namespace DesignPattern.Proxy {
class Program {
static void Main(string[] args) {
ITextLog textLog = new TextLogProxy();
textLog.Write("this is a message");
}
}
}