CSharp: Proxy Pattern in donet.core 6.0
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Geovin.Du.DuProxy.DuProtectionProxy
{
/// <summary>
/// 代理模式 Proxy Pattern
/// </summary>
public class Employee
{
/// <summary>
///
/// </summary>
/// <param name="username"></param>
/// <param name="password"></param>
/// <param name="role"></param>
public Employee(string username, string password, Role role)
{
Username = username;
Password = password;
Role = role;
}
/// <summary>
/// 账户/用户名
/// </summary>
public string Username { get; set; }
/// <summary>
/// 密码
/// </summary>
public string Password { get; set; }
/// <summary>
/// 角色
/// </summary>
public Role Role { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Geovin.Du.DuProxy.DuProtectionProxy
{
/// <summary>
/// 代理模式 Proxy Pattern
/// 角色
/// </summary>
public enum Role
{
/// <summary>
/// 工作人员
/// </summary>
Worker,
/// <summary>
/// 管理者
/// </summary>
Manager,
/// <summary>
/// 高层
/// </summary>
CEO,
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Geovin.Du.DuProxy.DuProtectionProxy
{
/// <summary>
/// 代理模式 Proxy Pattern
/// </summary>
public interface ISharedFolder
{
/// <summary>
///
/// </summary>
void Access();
}
}
using Geovin.Du.DuProxy.DuProtectionProxy;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Geovin.Du.DuProxy.DuProtectionProxy
{
/// <summary>
/// 代理模式 Proxy Pattern
/// </summary>
public class SharedFolder : ISharedFolder
{
/// <summary>
///
/// </summary>
public void Access() => Console.WriteLine("打开共享文件夹.");
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Geovin.Du.DuProxy.DuProtectionProxy
{
/// <summary>
///
/// </summary>
public class SharedFolderProxy : ISharedFolder
{
/// <summary>
/// 代理模式 Proxy Pattern
/// </summary>
private readonly Employee _employee;
/// <summary>
///
/// </summary>
private readonly SharedFolder _sharedFolder;
/// <summary>
///
/// </summary>
/// <param name="employee"></param>
/// <param name="sharedFolder"></param>
public SharedFolderProxy(Employee employee, SharedFolder sharedFolder)
{
_employee = employee;
_sharedFolder = sharedFolder;
}
/// <summary>
/// 权限 管理者和高层
/// </summary>
public void Access()
{
if (_employee.Role is Role.Manager or Role.CEO)
{
_sharedFolder.Access();
return;
}
Console.WriteLine($"具有该角色的员工 '{_employee.Role}' 没有访问共享文件夹的权限");
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Geovin.Du.BuildingBlocks;
namespace Geovin.Du.DuProxy.DuProtectionProxy
{
/// <summary>
/// 代理模式 Proxy Pattern
/// </summary>
public static class ProtectionProxyExecutor
{
/// <summary>
///
/// </summary>
public static void Execute()
{
ConsoleExtension.WriteSeparator("代理模式 Protection proxy pattern demo");
TryToAccessTheSharedFolder("GeovinDu", "password", Role.Worker);
TryToAccessTheSharedFolder("GeovinTu", "password", Role.CEO);
}
/// <summary>
///
/// </summary>
/// <param name="username"></param>
/// <param name="password"></param>
/// <param name="role"></param>
private static void TryToAccessTheSharedFolder(string username, string password, Role role)
{
Console.WriteLine(
$"\n使用用户名: '{username}'和角色: '{role}' " +
$"正在尝试访问共享文件夹...");
var employee = new Employee(username, password, role);
var sharedFolder = new SharedFolder();
var folderProxy = new SharedFolderProxy(employee, sharedFolder);
folderProxy.Access();
}
}
}
调用:
Geovin.Du.DuProxy.DuProtectionProxy.ProtectionProxyExecutor.Execute();
Console.WriteLine();
输出:
Hello, Geovin Du! 学习 .net 6 代理模式 Protection proxy pattern demo -------------------------------------------------- 使用用户名: 'GeovinDu'和角色: 'Worker' 正在尝试访问共享文件夹... 具有该角色的员工 'Worker' 没有访问共享文件夹的权限 使用用户名: 'GeovinTu'和角色: 'CEO' 正在尝试访问共享文件夹... 打开共享文件夹.
哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)
浙公网安备 33010602011771号