package com.weigu.xiaochuang.proxy; /** * 接口是一个抽象的概念,所谓的抽象的概念就是很多的类或者对象都具有这样的一个特征,这样的话 * 其实就是解决了代码冗余的问题,这也就是为什么会有接口的原因;,提高了代码的可用性 * 代理:代理真实对象去办理,从而实现一些附加功能; */ public class LandlordImpl implements Landlord { /** * 这是一个真实的对象,很单充,就是出租房子; * @return */ @Override public boolean rental() { System.out.println("李老板房子出租啦"); return true; } }
/** * 代理对象的两个目的: * 1.代表真实对象,实现真实对象的功能; * 2.在实现真实对象的基础之上,实现自己的价值,增加附加的功能; * 3.最终还的由真实对象去做; */ public class LandlordProxy implements Landlord { //真实对象的一个引用 private final Landlord landlord; private static final int NUM_ALLOWED = 5; private int numPersons = 1; //这个利用到了接口的抽象特性,具体的调用,具体处理 public LandlordProxy(Landlord landlord) { this.landlord = landlord; } public boolean rental() { if (numPersons < NUM_ALLOWED) { System.out.println("今天李老板不接客了"); } else { // //代理对象----实现真实对象之前做的一些事; beforeRental(); numPersons++; //实现真实对象的作用 if (landlord.rental()) { // //代理对象----实现真实对象之后做的一些事; afterRental(); } } return false; } private void afterRental() { System.out.println("收取佣金"); } private void beforeRental() { System.out.println("带人看房子"); } }
package com.weigu.xiaochuang.proxy; /** * 代理:就是代理对象和真实对象实现相同的接口,但是代理对象可以有更多的操作, * 真实对象:委托对象 * 代理对象:被委托对象; * 相同的接口: * 也就是说只要接口变化,实现类一定是要变化的. * 真实对象的目标只有一个,而代理对象就是在真实对象的基础上做了进一步的操作,但是最终实现的结果 * 就是必须实现真实对象的作用, * 接口是一个抽象的概念,或者说抽象类就是一个抽象的概念, * 实现类是一个具体的概念,也就是说:对象就是一个具体的概念 */ public interface Landlord { boolean rental(); }