一丶代理模式

代理模式(Proxy Pattern),为其它对象提供一种代理以控制对这个对象的访问。

  • Rain 抽象接口
  • ConcreteRain 具体的实现类
  • ProxyRain 具体的代理实现

这里的代理模式实现主要是 在代理类中的构造器中实现concreteRain这个具体类, 这样在调用的时候就直接关心代理类, 而不关注具体的实现类

这里的ProxyRain只能代理 concreateRain.代码如下:

package myc_demo.proxy;



/**
 * @program: Demo
 * @description: 人间有味是清欢
 * @author: liuSha.pufengjun
 * @create: 2018-07-26 16:33
 **/


public interface Rain {

    void raining();

}
package myc_demo.proxy;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @program: Demo
 * @description: 人间有味是清欢
 * Concrete 具体的
 * @author: liuSha.pufengjun
 * @create: 2018-07-26 16:38
 **/
public class ConcreteRain implements Rain {

    private static  final Logger logger = LoggerFactory.getLogger(ConcreteRain.class);

    @Override
    public void raining() {
        logger.info("ConcreteRain.raining");
    }
}
package myc_demo.proxy;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Random;

/**
 * @program: Demo
 * @description: 人间有味是清欢
 * @author: liuSha.pufengjun
 * @create: 2018-07-26 16:40
 **/
public class ProxyRain implements Rain {

    private static  final Logger logger = LoggerFactory.getLogger(ProxyRain.class);

    private  Rain rain;

    public ProxyRain() {
        rain = new ConcreteRain();
    }

    @Override
    public void raining() {
        pre();
        if(new Random().nextBoolean()){
            rain.raining();
        }else {
            logger.info("permission denied");
        }
        post();
    }

    private void pre() {
        logger.info("ProxyRain.pre()");
    }
    private void post() {
        logger.info("ProxyRain.post()");
    }
}

测试类:

package myc_demo.proxy;

/**
 * @program: Demo
 * @description: 人间有味是清欢
 * @author: liuSha.pufengjun
 * @create: 2018-07-26 16:45
 **/
public class StaticProxyClient {

    public static void main(String[] args) {
        Rain rain = new ProxyRain();
        rain.raining();
    }
}

测试结果如下:

猜你喜欢

转载自blog.csdn.net/qq_22899021/article/details/81223570
今日推荐