## 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<String>) {
val base = BaseImpl()
BaseProxy(base).show()
}