設計模式之代理模式

代理模式

代理模式是一種很巧妙的設計方式,經過設置代理能夠達到不暴露實際的動做類,代理模式主要使用了Java的多態,幹活的是被代理類,代理類是顯式調用的一方 下面來看代碼:首先建立一個Action的接口java

package com.wzl.proxy;

/**
 * @author wuzhilang
 * @Title: Action
 * @ProjectName design_pattern
 * @Description: 
 * @date 2019/1/3115:11
 */
public interface Action {
	public void eat();
	public void swim();
}

我在這個類裏面建立了兩個方法,eat和swim,下面是實現這個接口的人api

package com.wzl.proxy;

/**
 * @author wuzhilang
 * @Title: Me
 * @ProjectName design_pattern
 * @Description: TODO
 * @date 2019/1/3115:23
 */
public class Me implements Action {
	@Override
	public void eat() {
		System.out.println("我吃肉");
	}

	@Override
	public void swim() {
		System.out.println("我游泳");
	}
}
package com.wzl.proxy;

/**
 * @author wuzhilang
 * @Title: You
 * @ProjectName design_pattern
 * @Description: 代理模式的核心
 * @date 2019/1/3115:13
 */
public class You implements Action {
	private Action kindWomen;
	public You(){
		this.kindWomen = new Me();
	}
	public You(Action kindWomen){
		this.kindWomen=kindWomen;
	}
	@Override
	public void eat() {
		this.kindWomen.eat();
	}

	@Override
	public void swim() {
		this.kindWomen.swim();

	}
}

這裏Me完成的是eat()和swim(),You在這個裏面的做用主要是關聯Me的動做,You代理了個人存在 最後就是測試類ide

package com.wzl.proxy;

/**
 * @author wuzhilang
 * @Title: ProxyTest
 * @ProjectName design_pattern
 * @Description: TODO
 * @date 2019/1/3117:14
 */
public class ProxyTest
{
	public static void main(String[] args) {
		You you = new You();
		you.eat();
		you.swim();
	}
}

結果的輸出是:測試

"C:\Program Files\Java\jdk1.8.0_111\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2018.3\lib\idea_rt.jar=51884:C:\Program Files\JetBrains\IntelliJ IDEA 2018.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_111\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\rt.jar;D:\360Downloads\production\design_pattern;D:\Program Files\Maven\Repositories\org\junit\jupiter\junit-jupiter-api\5.4.0-RC1\junit-jupiter-api-5.4.0-RC1.jar;D:\Program Files\Maven\Repositories\org\apiguardian\apiguardian-api\1.0.0\apiguardian-api-1.0.0.jar;D:\Program Files\Maven\Repositories\org\opentest4j\opentest4j\1.1.1\opentest4j-1.1.1.jar;D:\Program Files\Maven\Repositories\org\junit\platform\junit-platform-commons\1.4.0-RC1\junit-platform-commons-1.4.0-RC1.jar" com.wzl.proxy.ProxyTest
我吃肉
我游泳

Process finished with exit code 0

經過最後的結果,能夠看出,咱們雖然是You在調用接口,最後的Action的動做實體確是Me。this

相關文章
相關標籤/搜索