zoukankan      html  css  js  c++  java
  • 设计模式学习之代理模式(Proxy)

    一、代理模式的初衷

    不想让客户端直接访问具体实现接口,客户端不应该直接访问具体实现,一般会涉及到以下四个对象

    • 业务接口:定义客户端访问的接口,是实现类和代理类都需要实现的
    • 实现类:实现了业务接口,真正的实现是在这里
    • 代理类:同样实现了业务接口,一般都会关联一个实现类的实例,由它来调用实现类
    • 客户端:顾名思义,使用者,与代理类打交道,甚至都不知道具体实现类的存在。

    二、代理模式设计图

    image

    三、代理模式的简单实现代码

    BizInterface.java

    package com.lipan.designpattern;
    /*
     * @author:lipan
     * 
     * */
    public interface BizInterface {
        
        public void doSomeBizWork();
     
    }

    BizProxy.java

    package com.lipan.designpattern;
     
    public class BizProxy implements BizInterface{
     
        private BizRealService obj;
        @Override
        public void doSomeBizWork() {
        
            if(obj == null){
                obj = new BizRealService();
            }
            
            System.out.println("do some non-biz work before real biz work");
            obj.doSomeBizWork();
            System.out.println("do some non-biz work after real biz work");
            
        }
     
    }

    BizRealService.java

    package com.lipan.designpattern;
     
    public class BizRealService implements BizInterface{
     
        @Override
        public void doSomeBizWork() {
            // TODO Auto-generated method stub
            System.out.println("Do some real work in Class BizRealService!");
        }
    }

    TestProxy.java

    package com.lipan.test;
     
    import com.lipan.designpattern.*;
     
    public class TestProxy {
     
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            BizProxy bp = new BizProxy();
            bp.doSomeBizWork();
        }
    }
  • 相关阅读:
    mysql忘记root密码解决办法
    laravel 获取所有表名
    跳转/传值(从页面到php文件)
    smarty foreach
    radio单选框
    dedecms实例化对象
    file_get_contents()
    if($a)
    bug解决思路
    git查看远程仓库地址
  • 原文地址:https://www.cnblogs.com/obama/p/3831569.html
Copyright © 2011-2022 走看看