android开发之代理模式

代理模式

 代理模式也是平时比较常用的设计模式之一,代理模式其实就是提供了一个新的对象,实现了对真实对象的操作,或成为真实对象的替身.在日常生活中也是很常见的.例如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();



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值