.NET 代理模式
本文章出自全栈Ace VIP课程
b战搜索全栈Ace
仅用作学习记录
1.创建一个控制台项目
名称叫ProxyPattern.Console
2.新建一个明星类,名称叫Star
Star
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace ProxyPattern.Console
{
public class Star
{
public string Name { get; set; }
/// <summary>
/// 签名
/// </summary>
/// <returns></returns>
public string SignName()
{
return Name;
}
/// <summary>
/// 签约方法
/// </summary>
public bool SignContract(int pay)
{
if (pay < 320000) return false;
else return true;
}
}
}
3. 创建一个俱乐部类Club
Club
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace ProxyPattern.Console
{
public class Club
{
public Star Star { get; }
public Club(Star star)
{
this.Star = star;
}
public bool SignContract(int pay)
{
return Star.SignContract(pay);
}
}
}
4.创建一个粉丝类:Fans
Fans
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace ProxyPattern.Console
{
public class Fans
{
public Star Star { get; }
public Fans(Star star)
{
this.Star = star;
}
public string SignName()
{
return Star.SignName();
}
}
}
5.program中调用
program
// See https://aka.ms/new-console-template for more information
// Console.WriteLine("Hello, World!");
using ProxyPattern.Console;
Star star = new();
star.Name = "ftm";
Club club = new Club(star);
Fans fans = new Fans(star);
club.SignContract(10000);
fans.SignName();
6.创建一个签约接口:
ISignContract
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace ProxyPattern.Console
{
public interface ISignContract
{
bool SignContract(int pay);
}
}
7.创建一个签名接口:
ISignName
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace ProxyPattern.Console
{
public interface ISignName
{
string SignName();
}
}
8.将明星类(Star)继承于这两个接口:
其他的也没改变,就不写了
public class Star : ISignName, ISignContract
9.将Clud继承于ISignContract接口
10.将Fans继承于ISignName接口
由于代码很简单,这里就不写了
11.接下来创建一个代理人(Agent) 类
Agent
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace ProxyPattern.Console
{
/// <summary>
/// 代理人
/// </summary>
public class Agent : ISignName, ISignContract
{
Fans fans;
Club club;
public Agent(Star star)
{
fans = new(star);
club = new(star);
}
public bool SignContract(int pay)
{
return club.SignContract(pay);
}
public string SignName()
{
return fans.SignName();
}
}
}
12.上端代码更新为如下代码:
program
using ProxyPattern.Console;
Star star = new();
star.Name = "ftm";
Agent agent = new Agent(star);
agent.SignContract(500000000);
agent.SignName();
总结:代理人模式就相当于把原本需要这个类干很多事,和其他不同的类交互多次,但是有了代理类,只需要交互一次就够了。(个人理解,错误的地方请指正)
越是无知的人越是觉得自己无所不知(之前的自己)
越是学习的人越是觉得自己会的太少了(现在的自己)
共勉