恋爱过程中的设计模式之代理模式(静态代理模式)

代理模式分为静态代理和动态代理
下面我分别举例静态代理和动态代理的实例以及如何使用代理模式实现AOP的功能

静态代理模式
package com.fruitking.designparten.proxy.sproxy;

public interface Idea {
	
	/**
	 * 表白
	 * @param condition
	 * @return
	 */
	public String tell(String condition);
	
	/**
	 * 寄送礼品
	 * @param gift
	 * @return
	 */
	public String delivery(String gift);
	
}

package com.fruitking.designparten.proxy.sproxy;


public class HeroImpl implements Idea {

	public String tell(String condition) {
		System.out.println("××,我喜欢你,做我女朋友吧!");
		String returnOfGirl = "";
		if("有房".equals(condition)){
			returnOfGirl = "可以";
		}else if("月薪1万以上".equals(condition)){
			returnOfGirl = "可以";
		}else if("长得帅".equals(condition)){
			returnOfGirl = "可以";
		}else{
			returnOfGirl = "去死吧,我怎么可能喜欢你呢,下辈子吧";
		}
		return returnOfGirl;
	}
	
	public String delivery(String gift){
		System.out.println("××,送给你的情人节礼物!");
		String returnOfGirl = "";
		if("奔驰轿车".equals(gift)){
			returnOfGirl = "亲爱的,我非常爱你";
		}else if("大钻戒".equals(gift)){
			returnOfGirl = "亲爱的,我很爱你";
		}else if("铂金项链".equals(gift)){
			returnOfGirl = "亲爱的,我爱你";
		}else if("毛绒娃娃".equals(gift)){
			returnOfGirl = "亲爱的,谢谢啦";
		}else{
			returnOfGirl = "谢谢啦,我要回家了,再见";
		}
		return returnOfGirl;
	}
}

package com.fruitking.designparten.proxy.sproxy;

public class HeroProxy implements Idea {
	
	private Idea hero;
	
	public HeroProxy(Idea obj){
		this.hero = obj;
	}
	
	public String tell(String condition) {
		System.out.println("代理人(女孩室友)去帮男主角转达/递送");
		String result =hero.tell(condition);
		System.out.println("代理人(女孩室友)已经帮男主角转达/递送");
		return result;
	}
	
	public String delivery(String gift){
		System.out.println("代理人(女孩室友)去帮男主角转达/递送");
		String result =hero.delivery(gift);
		System.out.println("代理人(女孩室友)已经帮男主角转达/递送");
		return result;
	}
}

package com.fruitking.designparten.proxy.sproxy;


public class Test {

	public static void main(String[] args) {
		Idea heroImpl = new HeroImpl();
		HeroProxy heroProxy = new HeroProxy(heroImpl);
		String result = heroProxy.tell("没有房子,月薪没有一万,长得不帅");
		System.out.println(result);
		System.out.println("-------------------------");
		result = heroProxy.tell("有房");
		System.out.println(result);
		System.out.println("-------------------------");
		result = heroProxy.delivery("大钻戒");
		System.out.println(result);
		System.out.println("-------------------------");
		result = heroProxy.delivery("爆米花");
		System.out.println(result);
	}

}

你可能感兴趣的:(设计模式,AOP,idea)