android开发之代理模式

来源:互联网 发布:ftp主进程打开的端口 编辑:程序博客网 时间:2024/06/07 01:57

代理模式

 代理模式也是平时比较常用的设计模式之一,代理模式其实就是提供了一个新的对象,实现了对真实对象的操作,或成为真实对象的替身.在日常生活中也是很常见的.例如A要租房,为了省麻烦A会去找中介,中介会替代A去筛选房子,A坐享中介筛选的结果,并且交房租也是交给中介,这就是一个典型的日常生活中代理模式的应用.平时打开网页,最先开到的一般都是文字,而图片等一些大的资源都会延迟加载,这里也是使用了代理模式.

Abstract Subject:抽象主题 --> 声明代理主题和真实主题的接口;
Real Subject  :真实主题 --> 被代理主题所引用;
Proxy Subject:代理主题 --> 可以实现跟真是主题一样的接口,那么代理主题可以操作真实主题。

这里就拿A找中介租房为Demo来构建代理模式.

       根据场景先定义一个抽象主题,Ihouse,提供三个方法,分别是获取房屋信息,签合同和付租金.
public interface Ihouse {    void getInfo();    void getHetong();    void getPay();}
接下来定义真实主题,并实现Ihouse接口.增加房屋名称和价格两个属性,填充借口方法,在获取房屋信息的时候就把房屋名称和价格log出来;付租金的时候log出价格.
public class House implements Ihouse{    private String name ;    private int price ;    public House(String name, int price) {        this.name = name;        this.price = price;    }    @Override    public void getInfo() {        //log测试输出                Log.d("qq","name:" + name);    }    @Override    public void getHetong() {    }    @Override    public void getPay() {//log测试输出        Log.d("qq","price:" + price);    }}
定义房屋代理,同样需要实现Ihouse接口,并持有House的引用.可以看到代理类其实就像有封装House,提供了一些附加操作,例如客户要看房子的时候代理会先检索自己库存的房屋信息,签合同之前要准备合同之类的.
public class Pay implements Ihouse{    private Ihouse ihouse ;    public Pay(Ihouse ihouse) {        this.ihouse = ihouse;    }    @Override    public void getInfo() {            ihouse.getInfo();    }    @Override    public void getHetong() {        ihouse.getHetong();    }    @Override    public void getPay() {        ihouse.getPay();    }}
 对于客户来说,完全不用跟House进行直接交互,这里先定义一个房子叫aaa,租金20,建立一个房屋代理,把aaa给代理.客户要找房子,签合同,付租金直接找代理就行了.
Ihouse h = new House("aaa",20);        Ihouse h1 = new Pay(h);        h1.getInfo();        h1.getPay();        h1.getHetong();



原创粉丝点击