代理模式

定义:为另一个对象提供一个替身或者占位符以控制这个对象的访问。

通常代理模式有三个角色1.抽象接口(定义了代理对象和真实处理事务的对象所需实现的方法)2.真实事务处理对象3.代理对象。

案例演示:这次采用打印机的比喻来对代理模式进行简单的解释。

1.首先定义打印机接口。

public interface DayinJi {
    //  打印文字
    void outZi();
    //  打印图片
    void outImage();
}

2.定义真实事务处理打印机对象

public class DaYnJiIml implements DayinJi{
    private static DaYnJiIml dayinji;
    //  构造私有化仅可以通过getInstance()获取唯一对象
    private DaYnJiIml(){}
    public static DaYnJiIml getInstance(){
        if(dayinji==null){
            synchronized (DaYnJiIml.class) {
                if(dayinji==null){
                    dayinji=new DaYnJiIml();
                }
            }
        }
        return dayinji;
    }
    @Override
    public void outZi() {
        // TODO Auto-generated method stub
        System.out.println("打印文字");
    }
    @Override
    public void outImage() {
        // TODO Auto-generated method stub
        System.out.println("打印图片");
    }
}

3.定义代理打印机

public class DaYinJiProxy implements DayinJi{
    private DaYnJiIml mDaYinJi;
    public DaYinJiProxy() {
        // TODO Auto-generated constructor stub
    //      获取打印机对象实例
        mDaYinJi=DaYnJiIml.getInstance();
    }
    @Override
    public void outZi() {
        // TODO Auto-generated method stub
        mDaYinJi.outZi();
    }

    @Override
    public void outImage() {
        // TODO Auto-generated method stub
        mDaYinJi.outImage();
    }

}

4.通过实现代理打印机来进行打印

public class Clint {
    public static void main(String[] args) {
        DaYinJiProxy daYinJiProxy=new DaYinJiProxy();
        daYinJiProxy.outImage();
        daYinJiProxy.outZi();
    }
}

效果展示

代理模式
效果展示
上一篇:playframework1.x的eclipse插件开源-playtools


下一篇:mysql的SQL语句转换为KDB+的SQL语句