明星类型:
package dynamic_proxy_mode; /** * 明星类型 */ public interface Star { /** * 面谈 */ void confer(); /** * 签合同 */ void signContract(); /** * 订票 */ void bookTicket(); /** * 唱歌 */ void sing(); /** * 收款 */ void collectMoney(); }
具体明星:
package static_proxy_mode; /** * 具体明星, 某某明星, 明星实现类, 真实明星 */ public class RealStar implements Star { /** * 面谈 */ @Override public void confer() { System.out.println("真实角色面谈!"); } /** * 签合同 */ @Override public void signContract() { System.out.println("真实角色签合同!"); } /** * 订票 */ @Override public void bookTicket() { System.out.println("真实角色订票!"); } /** * 唱歌 */ @Override public void sing() { System.out.println("真实角色(周杰伦本人)唱歌!"); } /** * 收款 */ @Override public void collectMoney() { System.out.println("真实角色收款!"); } }
明星代理类:
package static_proxy_mode; /** * 经纪人(明星代理类) */ public class ProxyStar implements Star { /** * 控制某个明星, 此处可以是列表 */ private Star star; /** * 构造器(传入明星) */ public ProxyStar(Star star) { this.star = star; } /** * 由经纪人(代理对象)去面谈 */ @Override public void confer() { System.out.println("经济人(代理角色)面谈!"); } /** * 经纪人去签合同 */ @Override public void signContract() { System.out.println("经济人签合同!"); } /** * 经纪人去订票 */ @Override public void bookTicket() { System.out.println("经济人订票!"); } /** * 经纪人请真实明星唱歌, 代理对象调用真正对象的唱歌方法 * 此处用到了真实对象, 因为代理对象无法自己做这件事, 如果自己实现了, 就不需要真实对象, 也不叫代理模式 */ @Override public void sing() { star.sing(); } /** * 经纪人去收款 */ @Override public void collectMoney() { System.out.println("经济人收款!"); } }
类图:
测试类:
package static_proxy_mode; public class Client { public static void main(String[] args) { //创建真实对象 Star real = new RealStar(); //创建代理对象(传入需要代理的真实对象) Star proxy = new ProxyStar(real); //代理对象去做一些事 proxy.confer(); proxy.signContract(); proxy.bookTicket(); proxy.sing();//代理对象调用真正对象的唱歌方法 proxy.collectMoney(); } }
执行结果:
经济人(代理角色)面谈! 经济人签合同! 经济人订票! 真实角色(周杰伦本人)唱歌! 经济人收款!
谢谢声明出处!
转自: http://www.cnblogs.com/gscq073240/articles/7117899.html