C# 代理模式、缓存器

此时一个类,执行的为耗时动作 

namespace 结构型设计模式
{
    internal class AgentcslongTime
    {
        public bool Getsomething()
        {
            Thread.Sleep(3000);
            Console.WriteLine("getsomething");
            Thread.Sleep(3000);
            return true;
        }
        public void Dosomething()
        {
            Thread.Sleep(3000);
            Console.WriteLine("dosomething");
            Thread.Sleep(3000);
        }
        public void Waitsomething()
        {
            Thread.Sleep(3000);
            Console.WriteLine("waitsomething");
            Thread.Sleep(3000);
        }


    }
}

 使用代理模式可以完成A对B的访问,同时不会更改B的代码。此刻称为代理模式

代理模式也可以理解为包一层。

有句话说的好,没有什么是包一层不能解决的,如果有,再包一层。

缓存器

同一件事情,如果已经执行过一次,比如去车站买票,

第一步需要到达车站,

第二部需要购买车票,

第三部需要等待排队。

而如果实例化多次的话,会重复这三个动作,但是其实第一步到达车站是不再需要重复的。这个时候就需要缓存器。

缓存器就是增加一个字典,将已经做完不需要重复做的事情加入缓存器中,当再次执行的时候进行判断。这样就可以节省其他实例带来的重复性工作。有效的增加效率。

namespace 结构型设计模式
{
    internal class Agentcs:AgentcslongTime
    {
        //加入static的话其实可以实现单实例的作用。
        private  static AgentcslongTime _AgentcslongTime=new AgentcslongTime();
        //实现缓存器的方法
        private static Dictionary<string ,bool> keyValuePairs = new Dictionary<string ,bool>();


        //代理模式,通过A完成对B的访问。   从而不对B进行修改
        //代理:只能传达原有的逻辑,不能新增业务逻辑
        //称呼为包一层,没有什么技术问题是包一层不能解决的,如果有,再包一层
        public bool Getsomething()
        {
            Console.WriteLine(DateTime.Now.ToString()+"准备Getsomething");
            //******************实现缓存器的方法,如果字典中有直接返回,这样可以增加效率完成缓存**********************
            //******************如果没有的话就进行执行并加入到字典中**********************
            bool result =false;
            string key = "Getsomething";
            if (keyValuePairs.ContainsKey(key))
            {
                result = keyValuePairs[key];
            }
            else
            {
                result = _AgentcslongTime.Getsomething();
                keyValuePairs.Add(key, result);
            }
            //*********************************************
            Console.WriteLine(DateTime.Now.ToString() + "完成Getsomething");
            return true;
        }
        public bool Dosomething()
        {
            Console.WriteLine(DateTime.Now.ToString() + "准备Dosomething");
            _AgentcslongTime.Dosomething();
            Console.WriteLine(DateTime.Now.ToString() + "完成Dosomething");
            return true;
        }
        public bool Waitsomething()
        {
            Console.WriteLine(DateTime.Now.ToString() + "准备Waitsomething");
            _AgentcslongTime.Waitsomething();
            Console.WriteLine(DateTime.Now.ToString() + "完成Waitsomething");
            return true;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值