zoukankan      html  css  js  c++  java
  • 代理模式

    代理模式:为其它对象提供一个代理,以控制对这个对象的访问。

    UML类图

    抽象类或者接口:

    abstract class Subject
    {
        public abstract void Request();
    }
    

    实现类:

    class ReadSubject : Subject
    {
        public override void Request()
        {
            Console.WriteLine("真实的请求");
        }
    }
    

    代理类:

    class Proxy:Subject
    {
        ReadSubject readSubject;
        public override void Request()
        {
            if (readSubject == null)
            {
                readSubject = new ReadSubject();
            }
            readSubject.Request();
        }
    }
    

    客户端:

    static void Main(string[] args)
    {
        Proxy proxy = new Proxy();
        proxy.Request();
    
        Console.Read();
    }
    

    运行结果:

    程序结构:

    -----------------------------------------

    运算接口:

    public interface IMath
    {
        double Add(double a, double b);
        double Sub(double a, double b);
        double Mul(double a, double b);
        double Div(double a, double b);
    }
    

    实现类:

    public class Math : IMath
    {
        public double Add(double a, double b)
        {
            return a + b;
        }
    
        public double Div(double a, double b)
        {
            return a - b;
        }
    
        public double Mul(double a, double b)
        {
            return a * b;
        }
    
        public double Sub(double a, double b)
        {
            return a / b;
        }
    }
    

    代理类:

    public class MathProxy : MarshalByRefObject, IMath
    {
        private Math math;
        public MathProxy()
        {
            if (math == null)
            {
                math = new Math();
            }
        }
    
        //public MathProxy()
        //{
        //    AppDomain ad = System.AppDomain.CreateDomain("MathDomain", null, null);
        //    ObjectHandle o = ad.CreateInstance("Proxy_RealWorld", "Math", false, System.Reflection.BindingFlags.CreateInstance, null, null, null, null, null);
        //    math = (Math)o.Unwrap();
        //}
    
        public double Add(double a, double b)
        {
            return math.Add(a, b);
        }
    
        public double Div(double a, double b)
        {
            return math.Div(a, b);
        }
    
        public double Mul(double a, double b)
        {
            return math.Mul(a, b);
        }
    
        public double Sub(double a, double b)
        {
            return math.Sub(a, b);
        }
    }
    

    客户端:

    static void Main(string[] args)
    {
        MathProxy p = new MathProxy();
        Console.WriteLine(p.Add(4,2));
        Console.WriteLine(p.Sub(4, 2));
        Console.WriteLine(p.Mul(4, 2));
        Console.WriteLine(p.Div(4, 2));
    
        Console.ReadKey();
    }
    

    运行结果:

    参考文章:

      http://www.cnblogs.com/zhenyulu/articles/48128.html

  • 相关阅读:
    jQuery诞生记-原理与机制
    你所不知的 CSS ::before 和 ::after 伪元素用法
    http中get与post的区别
    Http请求方法
    TCP/IP详解学习笔记(4)-ICMP协议,ping和Traceroute
    TCP/IP详解学习笔记(3)-IP协议,ARP协议,RARP协议
    TCP/IP详解学习笔记(2)-数据链路层
    TCP/IP详解学习笔记(1)-基本概念
    全面解析Java的垃圾回收机制
    深入Java虚拟机:JVM中的Stack和Heap
  • 原文地址:https://www.cnblogs.com/sunice/p/6691409.html
Copyright © 2011-2022 走看看