(精华)2020年8月13日 C#基础知识点 23种设计模式(结构型模式---代理模式)

public class Program
    {
        public static void Show()
        {
            ISubject subject = new ProxySubject();
            subject.DoSomething();
            subject.GetSomething();
        }
    }
    /// <summary>
    /// 业务接口
    /// </summary>
    public interface ISubject
    {
        /// <summary>
        /// get
        /// </summary>
        /// <returns></returns>
        bool GetSomething();

        /// <summary>
        /// do
        /// </summary>
        void DoSomething();
    }
    /// <summary>
    /// 没有什么技术问题是包一层不能解决的
    /// 我的地盘听我的,可以随意搞事情
    /// 日志/异常处理/权限/单例/缓存/事务。。
    /// 只要不是业务逻辑,都可以在这里扩展,而不影响Real
    /// </summary>
    public class ProxySubject : ISubject
    {
        private ISubject _iSubject = new RealSubject();
        public void DoSomething()
        {
            try
            {
                Console.WriteLine("This is DoSomething Before");
                this._iSubject.DoSomething();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

        public bool GetSomething()
        {
            return this._iSubject.GetSomething();
        }
    }
    /// <summary>
    /// 一个耗时耗资源的对象方法
    /// 一个第三方封装的类和方法
    /// </summary>
    public class RealSubject : ISubject
    {
        public RealSubject()
        {
            Thread.Sleep(2000);
            long lResult = 0;
            for (int i = 0; i < 100000000; i++)
            {
                lResult += i;
            }
            Console.WriteLine("RealSubject被构造。。。");
        }

        /// <summary>
        /// 火车站查询火车票
        /// </summary>
        public bool GetSomething()
        {
            Console.WriteLine("坐车去火车站看看余票信息。。。");
            Thread.Sleep(3000);
            Console.WriteLine("到火车站,看到是有票的");
            return true;
        }

        /// <summary>
        /// 火车站买票
        /// </summary>
        public void DoSomething()
        {
            //Console.WriteLine("This is DoSomething Before");

            Console.WriteLine("开始排队。。。");
            Thread.Sleep(2000);
            Console.WriteLine("终于买到票了。。。");
        }
    }

猜你喜欢

转载自blog.csdn.net/aa2528877987/article/details/107982601