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

    最近在看设计模式这本书,其中学到了代理模式这一节感觉还是挺有用的,顺便记录下来,如果有补充欢迎大家在评论区补充。

    首先,我们要明白代理模式的三种角色:

    抽象角色:通过接口或抽象类声明真实角色实现的业务方法。
    代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。
    真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。
    我们可以用代理模式来考虑其中一个应用场景,假如要实现写log记录日志的功能,可能会定义一个公共的写入方法,然后在去调用这个方法,但是在某些情况下可能要定制一些特殊的写入方法或者格式,这个时候考虑到特殊场景不是去修改公共的写入方法(顾名思义,公共方法就是具有普遍性而供多处调用的,区别于定制特性的方法)而是定义一个代理类去实现接口/抽象类,在这里所说的定制特殊的写入方法就是上面说的代理角色的附加自己的操作。
    写了一个简单的例子:
     1 #region Proxy pattern
     2     /// <summary>
     3     /// 抽象角色:通过接口或抽象类声明真实角色实现的业务方法。
     4     /// </summary>
     5     public interface IService
     6     {
     7         void SendMsg();
     8     }
     9     /// <summary>
    10     /// 真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。
    11     /// </summary>
    12     public class SinaService : IService
    13     {
    14         public void SendMsg()
    15         {
    16             Console.WriteLine("Hello");
    17         }
    18     }
    19     /// <summary>
    20     /// //代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。
    21     /// </summary>
    22     public class SinaServiceProxy
    23     {
    24         public IService service = null;
    25         public SinaServiceProxy()
    26         {
    27             service = new SinaService();
    28         }
    29         public void SendMsg()
    30         {
    31             Console.WriteLine("this is proxy ");
    32             service.SendMsg();
    33             Console.WriteLine("end.......");
    34         }
    35     }
    36     #endregion
  • 相关阅读:
    Python之Numpy详细教程
    poj-1151-Atlantis-线段树求面积并
    hdu 5277 YJC counts stars
    webpack安装和配置
    算法——基础篇——高速排序
    nyoj914(二分搜索+贪心)
    Android图片旋转,缩放,位移,倾斜,对称完整演示样例(一)——imageView.setImageMatrix(matrix)和Matrix
    我是怎么利用微信做兼职月入1W的
    对象逆序列化报错:java.lang.ClassNotFoundException
    输入法之核心词典构建
  • 原文地址:https://www.cnblogs.com/AngryShoes/p/7082780.html
Copyright © 2011-2022 走看看