代理模式之一:静态代理模式


//参考文档:

//https://m.baidu.com/?from=1000953f#iact=wiseindex%2Ftabs%2Fnews%2Factivity%2Fnewsdetail%3D%257B%2522linkData%2522%253A%257B%2522name%2522%253A%2522iframe%252Fmib-iframe%2522%252C%2522id%2522%253A%2522feed%2522%252C%2522index%2522%253A0%252C%2522url%2522%253A%2522https%253A%252F%252Fmbd.baidu.com%252Fnewspage%252Fdata%252Flandingpage%253Fs_type%253Dnews%2526dsp%253Dwise%2526context%253D%25257B%252522nid%252522%25253A%252522news_9963012525333056315%252522%25257D%2526pageType%253D1%2526n_type%253D1%2526p_from%253D-1%2526innerIframe%253D1%2522%252C%2522isThird%2522%253Afalse%252C%2522title%2522%253Anull%257D%257D


代理模式:指由一个代理主题来操作真实主题,真实主题执行具体的业务操作,而代理主题负责其他相关业务的处理。

 1.包含的角色
 抽象主题角色:可以是接口,也可以是抽象类
 真实主题角色:业务逻辑的具体执行者继承或实现抽象主题角色

 代理主题角色:内部含有真实主题角色的引用,所以要再构造函数里传入一个真实主题角色对象引用的参数。也继承或实现了主题角色,不过它实现的方法里没用具体的业务逻辑执行操作,而是通过内部的真实主题引用,调用真实主题的相应方法实现来完成具体的业务逻辑执行操作。

Let's look at the pictrue:

  代理模式之一:静态代理模式

Let's look at the code:

public class Test7 {
        

//第一步:定义抽象主题角色
public interface ICoder{
public void implDemands(String  demandName);
}

//第二步:定义真实主题角色
public class JavaCoder implements ICoder{
private String name;

public JavaCoder(String name) {
this.name=name;
}

public void implDemands(String demandName) {
System.out.println("JavaCoder "+" name" +"implemented demand: "+"demandName");
}
}

//第三步:定义代理主题角色,代理主题角色可以让真实主题角色只关心具体的业务逻辑执行,而其它的问题都由代理主题角色来完成
//例如本例种,增加需求就可以由代理主题角色来执行。
public class CoderProxy implements ICoder{
private ICoder coder;
 
public CoderProxy(ICoder coder) {
this.coder=coder;
}
         
 
@Override

public void implDemands(String demandName) {

//若不允许增加需求,就可以在这里添加一个验证,若不需要,就不用添加此判斷
//若不允许增加需求,就可以在这里添加一个验证,若不需要,就不用添加此判斷
//if(demandName.equals("Add")) {
// System.out.println("No Longer recive Add demand");
//  return;
//}

coder.implDemands(demandName);
}
 
}

//第四步:场景应用
public static void main(String[] args) {
//由于使用的都是内部类,所以要先定义一个外部类对象
Test7 outer=new Test7();
ICoder javaCoder=outer.new JavaCoder("Jack");
ICoder proxyCoder=outer.new  CoderProxy(javaCoder);
proxyCoder.implDemands("product");
}

}

代理模式的优点:
1.职责清晰,对吧,真实主题只用关注业务逻辑的执行就可以了。

2.高可扩展性,真实主题随意变,但代理主题不用变,面向用户的接口也就不会变。

其它应用场景:

    生活中的通过代理访问网络,客户通过网络代理连接网络(具体业务),由代理服务器完成用户权限和访问限制等与上网相关的其他操作(相关业务)