Java代理模式

    ## java设计模式之代理模式:
    
    一个类可以通过代理的方式去访问接口中的方法,其中需要三个对象
    
    1.抽象主题类:该类既可以是一个抽象类也可以是一个接口,里面定义了需要实现的方法
    
    2.真实主题类:该类也称为被委托活代理类,该类定义了代理所表示的真实对象,由其执行具体的业务逻辑方法,而客户端则通过代理类间接调用真实主题类的定义方法。
    
    3.代理类:该类也称为委托代理类,该类持有一个对真实主题类的引用,在其所实现的接口方法中调用真实主题类中相应的接口方法执行,以此起到代理作用。
    
    直接用代码的方式进行演示:
    
    
    先定义一个抽象主题类
    
      public interface User {
    
         /**
          * 业务方法
           */
         void getUserName();
      }
    
    再创建一个真实主题类
    
     public class RealUser implements User{
    
          /**
          * 真实业务实现
          */
         public void getUserName() {
             System.out.println("Real User");
         }
     }
    
    最后创建一个代理类来链接两者
    
    
     public class ProxyUser implements User{
      
        private RealUser realUser;
       
        public ProxyUser(RealUser mRealUser){
            this.realUser=mRealUser;
         }
        
          public void getUserName() {
           realUser.getUserName
         }
     }
    
    
    创建测试类
    
    public class Test {
    public static void main(String[] args) {
        /**
          * 构造一个真实主题对象
          */
        User realUser = new RealUser();
         /**
          * 通过真实主题对象创建一个代理对象
          */
        ProxyUser proxyUser = new ProxyUser(realUser);
        /**
            调用代理的相关业务方法
          */
        proxyUser.getUserName();
    }
}
    
    结果是:Real User
    
    代理模式到此结束

kotlin中的代理通过了by关键字来进行的:

定义一个接口,和一个方法 show()
interface Base {
fun show()
}

定义类实现 Base 接口, 并实现 show 方法
open class BaseImpl : Base {
override fun show() {
print("BaseImpl::show()")
}
}

定义代理类实现 Base 接口, 构造函数参数是一个 Base 对象
by 后跟 Base 对象, 不需要再实现 show()
class BaseProxy(base: Base) : Base by base

main 方法
fun main(args: Array) {
val base = BaseImpl()
BaseProxy(base).show()
}

你可能感兴趣的:(Java代理模式)