标签:sum 苹果 设计模式 and github 次数 实体 场景 类型
代理模式(Proxy Pattern) :给某一个对象提供一个代理,并由代理对象控制对原对象的引用。代理模式的英 文叫做Proxy或Surrogate,它是一种对象结构型模式。
Subject类:
namespace ProxyPattern.BasicStructure { abstract class Subject { public abstract void Request(); } }
RealSubject类:
namespace ProxyPattern.BasicStructure { class RealSubject : Subject { public override void Request() { Console.WriteLine($"真实的请求:{this.GetType()}"); } } }
Proxy类:
namespace ProxyPattern.BasicStructure { class Proxy : Subject { Subject subject; public override void Request() { if (subject == null) { subject = new RealSubject(); } subject.Request(); } } }
客户端调用代码:
static void Main(string[] args) { try { {//BasicStructure Proxy proxy = new Proxy(); proxy.Request(); } } catch (Exception ex) { Console.WriteLine(ex.Message); } Console.ReadKey(); }
结果如下:
场景模拟:最近手机越来越不好使了,准备买部IPhone XS,听说香港买比较便宜,刚好有个朋友要去香港,听说香港的准备叫他帮我从香港带一部回来。
BuyHandset(购买手机)类——Subject类
namespace ProxyPattern.SituationSimulation { /// <summary> /// 购买手机类 /// </summary> abstract class BuyHandset { public abstract void BuyAppleHandset(); } }
RealBuyHandset(真实购买手机)类——RealSubject类
namespace ProxyPattern.SituationSimulation { class RealBuyHandset : BuyHandset { public override void BuyAppleHandset() { Console.WriteLine($"{this.GetType().Name}购买了一部苹果手机!"); } } }
BuyHandsetProxy(购买手机代理)类——Proxy类
namespace ProxyPattern.SituationSimulation { class BuyHandsetProxy : BuyHandset { BuyHandset buyHandset; public override void BuyAppleHandset() { if (buyHandset == null) { buyHandset = new RealBuyHandset(); } buyHandset.BuyAppleHandset(); } } }
客户端调用代码:
static void Main(string[] args) { try { {//SituationSimulation BuyHandsetProxy proxy = new BuyHandsetProxy(); proxy.BuyAppleHandset(); } } catch (Exception ex) { Console.WriteLine(ex.Message); } Console.ReadKey(); }
结果如下:
代理模式的优点
代理模式的缺点
根据代理模式的使用目的,常见的代理模式有以下几种类型:
源代码地址:https://github.com/houzhenhuang/DesignPattern
标签:sum 苹果 设计模式 and github 次数 实体 场景 类型
原文地址:https://www.cnblogs.com/hhzblogs/p/10413407.html