.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();

总结:代理人模式就相当于把原本需要这个类干很多事,和其他不同的类交互多次,但是有了代理类,只需要交互一次就够了。(个人理解,错误的地方请指正)

posted @ 2022-08-10 22:21  rookiexwang  阅读(65)  评论(0编辑  收藏  举报