博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式之静态代理模式实战
阅读量:2002 次
发布时间:2019-04-28

本文共 1159 字,大约阅读时间需要 3 分钟。

转载自

静态代理模式很简单,代理类和实现类都实现相同的接口,然后通过代理类来调用实现类的方法。


如我们想保存用户信息之前打印用户信息,或者保存用户信息之后把这些信息缓存下来,即在运行方法前后插入执行一个别的操作,下面是一个简单的示例。


用户接口

public interface UserInterface {

    boolean saveUser(User user);

}


用户接口实现

public class UserInterfaceImpl implements UserInterface {

    @Override

    public boolean saveUser(User user) {

        System.out.println("保存用户: " + user.getName());

        return true;

    }

}


public class Test {



    public static void main(String[] args) {

        testStaticProxy();

    }


    private static void testStaticProxy() {

        User user = new User();

        user.setName("tom");

        new StaticProxy(new UserInterfaceImpl()).saveUser(user);

    }


    static class StaticProxy implements UserInterface {


        private UserInterface userInterface;

        public StaticProxy(UserInterface userInterface) {

            this.userInterface = userInterface;

        }


        @Override

        public boolean saveUser(User user) {

            System.out.println("静态代理-开始保存用户");

            boolean result = userInterface.saveUser(user);

            System.out.println("静态代理-保存用户结果: " + result);

            System.out.println();

            return result;

        }

    }

}


结果输出:


静态代理-开始保存用户

保存用户: tom

静态代理-保存用户结果: true


通过代码实战的方法学习设计模式,是不是觉得静态代理很简单了?


下面问题来了,如果我们想把用户接口内所有的方法都要代理,那我们所有的方法都要代理一遍,又或者之后又添加了新的方法,那又得重新写代理,十分麻烦,明天分享下动态代理的实现,解决了静态代理的不便扩展性。

你可能感兴趣的文章
实例属性和类属性
查看>>
使用枚举类
查看>>
StringIO和BytesIO
查看>>
财务分析与决策:同型分析
查看>>
Android studio出现:Your project path contains non-ASCII characters.
查看>>
Android--Error:Library projects cannot enable Jack. Jack is enabled in default config
查看>>
今日整理PDF电子书资料
查看>>
【语言-c#】C# 超级整数计算
查看>>
【软件-Doxgen】工具:程序代码生成xml文档(doxgen)
查看>>
【框架-MFC】CMFCPropertyGridCtrl(chenlu1):属性值改变事件的触发与处理
查看>>
【框架-MFC】CView(chenlu1):MFC在CView的派生类中实现打印和打印预览
查看>>
【语言-C++】Xml处理(chenlu1):UTF-8 的中文Key= 中文Value的解析()
查看>>
【软件-InstallAnywhere】Java软件打包:将指定的文件创建快捷方式并安装到桌面(工具installanywhere2012)
查看>>
【语言-C++】【框架-MFC】C++ 修改list双向链表 struct 结构体中成员的值
查看>>
【框架-MFC】CMFCMenuBar 菜单按钮的图标添加
查看>>
【Windows】Win10 查找“组或用户名”为TrustedInstaller 对象
查看>>
【语言-c#】C# 注释详细介绍说明
查看>>
MySQL 内存模型
查看>>
Ubuntu下gyp简单入门实例
查看>>
express 解析post方式下的json参数
查看>>