结构型模式
说明
记录《设计模式之禅》的学习之路,并用C#实现之
结构型模式(Structural Pattern)关注如何将现有类或对象组织在一起形成更加强大的结构
可分为两种:
- 类结构型模式:关心类的组合,由多个类可以组合成一个更大的系统,在类结构型模式中一般只存在继承关系和实现关系
- 对象结构型模式:关心类与对象的组合,通过关联关系使得在一个类中定义另一个类的实例对象,然后通过该对象调用其方法。更符合“合成复用原则”🐟
代理模式(Proxy Pattern)
public interface IGamePlayer
{
public void login(string user, string key);
public void killBoss();
public void upgrade();
}
public class GamePlayer : IGamePlayer
{
private string name = "";
public void killBoss()
{
Console.WriteLine(this.name + "杀死了Boss");
}
public void login(string user, string key)
{
Console.WriteLine(this.name + "登录了");
}
public void upgrade()
{
Console.WriteLine(this.name + "升级了");
}
}
public class GamePlayerProxy :IGamePlayer
{
private IGamePlayer player = null;
public GamePlayerProxy(IGamePlayer gamePlayer)
{
player = gamePlayer;
}
public void killBoss()
{
this.player.killBoss();
}
public void login(string user, string key)
{
this.player.login(user, key);
}
public void upgrade()
{
this.player.upgrade();
}
}
public class PlayerProxyClient
{
public void main()
{
IGamePlayer zhangsan = new GamePlayer();
IGamePlayer proxy = new GamePlayerProxy(zhangsan);
proxy.login("zhangsan", "1");
proxy.killBoss();
proxy.upgrade();
}
}
定义
Provide a surrogate or placeholder for another object to control access to it.
为其他对象提供 一种代理以控制对这个对象的访问。
通用类图
代理模式也叫做委托模式,它是一项基本设计技巧。
许多其他的模式,如状态模式、策 略模式、访问者模式本质上是在更特殊的场合采用了委托模式,
而且在日常的应用中,代理 模式可以提供非常好的访问控制。
在一些著名开源软件中也经常见到它的身影,如Struts2的 Form元素映射就采用了代理模式(准确地说是动态代理模式)。
● Subject抽象主题角色
抽象主题类可以是抽象类也可以是接口,是一个最普通的业务类型定义,无特殊要求。
● RealSubject具体主题角色
也叫做被委托角色、被代理角色。它才是冤大头,是业务逻辑的具体执行者。
● Proxy代理主题角色 也叫做委托类、代理类。
它负责对真实角色的应用,把所有抽象主题类定义的方法限制委托给真实主题角色实现,
并且在真实主题角色处理完毕前后做预处理和善后处理工作。