首页 > 其他分享 >13_代理模式

13_代理模式

时间:2024-03-12 10:22:57浏览次数:23  
标签:13 对象 double 代理 模式 result public math

代理模式是一种结构型设计模式,它提供了一个代理对象来控制对其他对象的访问。代理对象可以作为目标对象的代表,以控制对目标对象的访问、限制或增加功能。

代理模式有三个主要角色:

  1. 抽象主题(Subject):定义了目标对象和代理对象的公共接口,可以是抽象类或接口。

  2. 真实主题(Real Subject):实现了抽象主题接口,是被代理的真实对象。

  3. 代理(Proxy):实现了抽象主题接口,并持有一个真实主题的引用。代理可以在调用真实主题之前或之后执行额外的操作。

代理模式的工作原理如下:

  1. 抽象主题定义了目标对象和代理对象的公共接口,包含了需要增加或限制的方法。

  2. 真实主题实现了抽象主题接口,并实现了真实的业务逻辑。

  3. 代理实现了抽象主题接口,并持有一个真实主题的引用。代理可以在调用真实主题之前或之后执行额外的操作,如权限验证、缓存等。

  4. 客户端通过代理对象来访问目标对象,客户端无需直接与真实主题进行交互。

代理模式的优点包括:

  1. 可以实现对目标对象的访问控制,提高了系统的安全性。

  2. 可以实现对目标对象的功能增强,增加了系统的灵活性和扩展性。

  3. 可以实现对目标对象的延迟初始化,节省了系统的资源。

代理模式适用于以下场景:

  1. 当需要对目标对象的访问进行控制或增加额外功能时,可以使用代理模式。

  2. 当需要对目标对象进行延迟初始化时,可以使用代理模式。

  3. 当需要保护目标对象的安全性时,可以使用代理模式。

总结而言,代理模式通过引入代理对象来控制对目标对象的访问,可以增加或限制目标对象的功能。它提供了一种灵活的方式来控制对象的访问,并可以在不改变目标对象的情况下对其进行增强。

 

Subject

/// <summary>
    /// 加减乘除
    /// </summary>
    public interface IMath
    {
        double Add(double x, double y);
        double Subtract(double x, double y);
        double Multiply(double x, double y);
        double Divide(double x, double y);
    }

 

Real Subject

public class Math : IMath
    {
        public double Add(double x, double y)
        {
            return x + y;
        }

        public double Divide(double x, double y)
        {
            return x / y;
        }

        public double Multiply(double x, double y)
        {
            return (x * y);
        }

        public double Subtract(double x, double y)
        {
            return (x - y);
        }
    }

 

Proxy

public class MathProxy : IMath
    {
        private Math math = new Math();
        public double Add(double x, double y)
        {
            var result = math.Add(x, y);
            Console.WriteLine($"{x}+{y}={result}");
            return result;
        }

        public double Divide(double x, double y)
        {
            if (y == 0)
            {
                Console.WriteLine("0不能作为除数");
                return 0;
            }
            var result = math.Divide(x, y);
            Console.WriteLine($"{x}/{y}={result}");
            return result;
        }

        public double Multiply(double x, double y)
        {
            var result = math.Multiply(x, y);
            Console.WriteLine($"{x}*{y}={result}");
            return result;
        }

        public double Subtract(double x, double y)
        {
            var result = math.Subtract(x, y);
            Console.WriteLine($"{x}-{y}={result}");
            return result;
        }
    }

 

调用

internal class Client
    {
        public void Start()
        {
            IMath math = new MathProxy();
            math.Add(343, 334);
            math.Divide(43, 5);
            math.Divide(45, 0);
            math.Subtract(45, 5);
            math.Multiply(3, 4);
        }
    }
static void Main(string[] args)
        {
            new Client().Start();

            Console.ReadKey();
        }

 

标签:13,对象,double,代理,模式,result,public,math
From: https://www.cnblogs.com/MingQiu/p/18067723

相关文章

  • 12_享元模式
    享元模式是一种结构型设计模式,它通过共享细粒度的对象来最大限度地减少内存使用和对象创建的数量。享元模式通过将共享对象的状态外部化,使得对象可以共享,并提供了一个工厂类来管理共享对象的创建和获取。享元模式有五个主要角色:享元接口(Flyweight):定义了共享对象的接口,包含了需......
  • 11_外观模式
    外观模式是一种结构型设计模式,它提供了一个统一的接口,用于访问子系统中的一组接口。外观模式通过将客户端与子系统之间的复杂依赖关系解耦,简化了客户端的使用。外观模式有三个主要角色:外观(Facade):提供了一个统一的接口,用于访问子系统中的一组接口。外观封装了子系统的复杂性,简......
  • Redis安装之集群-哨兵模式(sentinel)模式
    官网说明:https://redis.io/docs/management/sentinel/一、背景Redis主从复制模型在一定程度上解决了读写分离、容灾恢复、数据备份、水平扩容支撑高并发的问题,但仍存在单点故障问题,即Mater宕机后,集群将无法提供写服务。二、方案原理主从复制的问题在于Mater宕机后,Slave......
  • 保护模式
    一、理解保护模式  大多数现代操作系统(包括Windows9X/NT/XP和Linux等)都是多任务的,CPU的保护模式是操作系统实现多任务的基础。了解保护模式的底层原理对学习操作系统有着事半功倍的作用。  保护模式是为了实现多任务而设计的,其名称中的“保护”就是保护任务环境中各个人物......
  • 观察者模式
     观察者:publicinterfaceObserver{voidupdate(floattemperature,floathumidity,floatpressure);}主体;publicinterfaceSubject{publicvoidregisterObserver(Observerobserver);publicvoidremoveObserver(Observerobserver);......
  • 7-13 停车场管理
    7-13停车场管理分数10作者 张泳单位 浙大城市学院设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的先后次序依次从停车场最里面向大门口处停放(即最先到达的第一辆车停放在停车场的最里面)。如果停车场已......
  • 134. 加油站c
     ji、假设26号复试的话,只有15天复习了。争取一个星期刷完代码随想录,最后一个星期来准备英语和重刷。intcanCompleteCircuit(int*gas,intgasSize,int*cost,intcostSize){intsum=0;int*oil=(int*)malloc(sizeof(int)*gasSize);for(inti=0;i<gasSize......
  • 7月13日《罗布乐思》全平台开放,一起探索无限世界
    首页开发者玩家教育 新闻7月13日《罗布乐思》全平台开放,一起探索无限世界罗布乐思2021-07-1222:43:56 7月13日,《罗布乐思》正式全平台开放。登录安卓端及IOS端,即可探索《罗布乐思》的无限世界。 《罗布乐思》是集体验、开发于一体的多人在线3D创意社区,......
  • 10_装饰模式
    装饰模式是一种结构型设计模式,它允许我们在不改变现有对象结构的情况下,动态地向对象添加额外的功能。装饰模式有四个主要角色:抽象组件(Component):定义了一个抽象接口,用于被具体组件和具体装饰器实现。具体组件(ConcreteComponent):实现了抽象组件接口,是被装饰的对象。抽象装......
  • Dynamics CRM 2013 常用SQL查询基础数据
    获取实体SELECT*FROMEntityWHERELogicalName='EntityName'获取字段名称SELECTdistinctA.nameAS字段名,L.labelAS显示名,AT.descriptionAS类型,L.ObjectColumnNameAS形式,A.IsNullableAScodefromattributeAINNERJOINlocalizedlabelLONA.Attributei......