代理模式C#案例
时间: 2023-07-05 18:20:18 浏览: 133
代理模式是一种结构型设计模式,它通过代理对象来控制对原始对象的访问。下面是一个C#中使用代理模式的示例,假设有一个远程数据库服务,我们需要在本地应用程序中访问该服务的数据,但是由于网络延迟等原因,直接访问远程服务时可能会存在性能问题,因此我们可以使用代理模式来实现本地缓存,减少对远程服务的访问。
```csharp
// 定义远程服务接口
public interface IDatabaseService
{
List<string> GetData();
}
// 实现远程服务
public class RemoteDatabaseService : IDatabaseService
{
public List<string> GetData()
{
// 模拟远程服务,返回数据
return new List<string> { "data1", "data2", "data3" };
}
}
// 定义代理类,实现远程服务接口
public class DatabaseServiceProxy : IDatabaseService
{
private readonly RemoteDatabaseService _remoteService;
private List<string> _cachedData;
public DatabaseServiceProxy()
{
_remoteService = new RemoteDatabaseService();
}
public List<string> GetData()
{
if (_cachedData == null)
{
// 第一次访问时,从远程服务获取数据,并缓存到本地
_cachedData = _remoteService.GetData();
}
// 返回缓存的数据
return _cachedData;
}
}
// 客户端代码
class Program
{
static void Main(string[] args)
{
// 使用代理类访问远程服务
IDatabaseService databaseService = new DatabaseServiceProxy();
var data = databaseService.GetData();
Console.WriteLine("Data: " + string.Join(",", data));
}
}
```
在上面的示例中,我们定义了远程服务接口`IDatabaseService`和实现类`RemoteDatabaseService`,代理类`DatabaseServiceProxy`实现了该接口,并使用远程服务对象`_remoteService`来实现实际的数据获取,同时在代理类中缓存了远程服务的数据,以便下一次访问时直接从缓存中获取,避免了频繁的网络访问。客户端代码中,我们使用代理类来访问远程服务,并输出获取到的数据。
这个示例展示了代理模式的一个常见应用场景,即在访问远程服务时使用代理类进行控制和优化。
阅读全文