java 代理模式详解之静态代理

来源:互联网 发布:java输入scanner 编辑:程序博客网 时间:2024/05/16 10:02

java的代理模式分为2种静态代理动态代理

代理模式的基本概念
真实角色 需要被代理的对象
代理角色 代理类
抽象角色 真实角色和代理角色需要共同实现的接口(可以理解为代理角色无法为真实角色做的事(方法))

静态代理
以租房为例 真实角色 是租房子的人 代理角色是中介 交租和签合同这两个行为为抽象角色
类似的案例还有买车的行为 顾客与4s店就存在这种代理关系还有婚庆公司的案例

代码示例

//抽象角色  代理角色无法为真实角色干的事情public interface RentingHouseIn {        void rentingHouse();   //付租金    void signContract();   //签合同}//真实角色public class Renter implements RentingHouseIn{  //租客     private String name;    public Renter(String name) {        this.name = name;    }    @Override    public void rentingHouse() {   //付租金        System.out.println(name + " 租房子  付租金");    }    @Override    public void signContract() {        System.out.println(name + "和房东签合同");            }     public String getName() {        return name;    }   }//代理角色需要持有真实角色的引用(通俗点讲就是中介需要知道帮谁在租房)public class Intermediary implements RentingHouseIn { //房产中介    private Renter renter;   //租客    public Intermediary(Renter renter) {   //通过构造器的方式这样中介就能知道在为谁做事        this.renter = renter;    }    @Override    public void rentingHouse() {        System.out.println("中介给"+renter.getName()+"找房源");    //代理类可以帮你做的事情        signContract();        renter.rentingHouse();    //这个就是无法被代理的  需要真实角色自己动手的        System.out.println("中介帮你。。。。");    }    @Override    public void signContract() {  //签合同        renter.signContract();    }  }//测试类public class TestClient {  //测试类    public static void main(String[] args) {        Renter renter = new Renter("张三");   //构造一个租客出来        //构造一个中介出来   代表  张三找中介租房  这中行为        Intermediary Intermediary = new Intermediary(renter);   //张三找中介        Intermediary.rentingHouse();//中介帮张三租房        System.out.println("-----------------------------");        Renter renter2 = new Renter("李四");           Intermediary Intermediary2 = new Intermediary(renter2);   //李四找中介        Intermediary2.rentingHouse();//中介帮李四租房    }}//测试结果中介给张三找房源张三和房东签合同张三 租房子  付租金中介帮你。。。。-----------------------------中介给李四找房源李四和房东签合同李四 租房子  付租金中介帮你。。。。

静态代理总结
静态代理 3个基本概念 真实角色 代理角色 抽象角色(接口)
需要注意的是:抽象角色是指代理类无法为真实角色做的事情 把这些事情(行为) 封装进接口中
真实角色、代理角色实现相同的接口(抽象建角色)
代理角色必须持有对真实角色的引用(这样代理角色才能知道是在为谁做事)

1 0
原创粉丝点击