代理设计模式(重点)
一个服务类接口,一个真实业务类,一个代理类,都实现了接口;
代理类调用正式业务类的方法并补充自己的方法;
所有的真实业务操作都会有一个与之辅助的工具类(功能类)共同完成。
如果有功能的增加,只要改变代理类就可以,不用改真实业务类,符合OCP原则;
代码:
package com.irilia.ProxyPattern;
/*1.业务接口
* 2.真实业务类
* 3.代理类*/
interface Business{
public void buyLipstick();
}
//真实业务类
class RealSubject implements Business{
@Override
public void buyLipstick() {
System.out.println("买一只mac口红");
}
}
//代理类
class ProxySubject implements Business{
private Business object;
public ProxySubject(Business object){
this.object = object;
}
//飞去国外
public void FlyAbroad(){
System.out.println("正在飞往美国");
}
//邮寄
public void SendByPost(){
System.out.println("正在邮寄");
}
@Override
public void buyLipstick() {
//飞去国外
this.FlyAbroad();
//购买
System.out.println("正在买mac口红");
//邮寄
this.SendByPost();
}
}
public class ProxyPatternTest {
public void ShoppingMail(Business object){
object.buyLipstick();
}
public static void main(String[] args) {
ProxyPatternTest client = new ProxyPatternTest();
client.ShoppingMail(new ProxySubject(new RealSubject()));
}
}