代理设计模式原理:
两个子类公共实现一个接口,一个子类负责主要业务实现,另外一个子类完成辅助主要业务的完成,还会有一些自己的业务。
代码:还是买电脑的例子
接口
package com.csdn.tail3;
/**
* Created with IntelliJ IDEA.
* Description:
* User: tail
* Date: 2019-08-05
* Time: 13:39
*/
interface Isubject {
void buycomputer();
}
负责主要业务实现的子类
package com.csdn.tail3;
public class RealSubject implements Isubject{
@Override
public void buycomputer() {
System.out.println("want to buy hupu Computer");
}
}
辅助实现主要业务,还有自己业务的子类
package com.csdn.tail3;
public class ProxySubject implements Isubject {
private Isubject isubject;
public ProxySubject(Isubject isubject) {
//这是为了表示传进来的参数是这个类的一个属性的赋值(语言可能存在误差,但是大概就这个意思)
this.isubject=isubject;
}
public void beforeSale(){
System.out.println("hupu computer was produced");
}
public void afterSale(){
System.out.println("computer after slaes");
}
@Override
public void buycomputer() {
this.beforeSale();
this.isubject.buycomputer();
this.afterSale();
}
}
//设置里一个工厂类
class Factory {
//static是和对象解绑,直接可以用类去调用
public static Isubject getInstance(){
return new ProxySubject(new RealSubject());
}
}
测试
package com.csdn.tail3;
public class TestBuycomputer {
public static void main(String[] args) {
// Isubject isubject = new ProxySubject(new RealSubject());
// isubject.buycomputer();
Isubject isubject = Factory.getInstance();
isubject.buycomputer();
}
}
知识点总结(总结了一些我自己还不熟悉,或者出现问题的知识点)
-
this.isubject=isubject;
这一句的作用是在于,传进来的参数我们没有明确指明,“isubject” 是什么,这个构造方法可以让属性和传进来的对象进行绑定,可以直接调用,就如后面的代码this.isubject.buycomputer();
对象调用了它的方法,this.isubject是这个类调用它的属性。 -
static
static在本文中其实就是让这个方法和对象解绑,只属于这个类。
一般调用一个类的对象需要先new一个对象,在让这个对象调用方法,而用了static 就直接可以让类直接调用方法。例 Isubject isubject = Factory.getInstance();
总结:这是一个简单的代理设计模式,都只是打印了一些文字而已,没有真正的去应用项目,比较适合初学者的接触了解。