zoukankan      html  css  js  c++  java
  • Java 使用单例模式实现数据同步(可以用作swing实现多页面数据同步与监听)

    参考

    1. Java Lambda行为参数化
    2. Java单例模式(Singleton)以及实现

    起因

    • 一直想学习如何做桌面软件,但是感觉java的swing都是写在一个页面中,感觉好乱,如果可以像前端那样就好了。(刚刚想起来可以拆分它)
    • 做桌面软件也需要多页面数据同步,但是没有搜索到swing如何实现多页面数据同步,类似于vue的vuex的库。(应该是方法不对)
    • 忽然想起js可以把函数当作参数传入到函数中,这样就实现了类似于监听数据的功能。

    代码

    • 调用方
    package swing;
    /**
     * @Author 夏秋初
     * @Date 2021/9/8 20:53
     */
    public class Index {
        public static void main(String[] args) {
            Data.getInstance().getKey("title", value->{
                System.out.println(value);
            });
            Data.getInstance().setKey("title","测试用例子");
        }
    }
    
    
    • 单例的数据操作监听类(观察者方法)
    package swing;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * @Author 夏秋初
     * @Date 2021/9/8 20:53
     */
    public class Data {
        private static Data instance;
        private HashMap<String,String> map = new HashMap<>();
        private Map<String, ListenDataLambda> listenDataLambdaMap = new HashMap<String, ListenDataLambda>();
        //
        public static synchronized Data getInstance(){
            if(instance==null){
                instance=new Data();
            }
            return instance;
        }
        //
        public void getKey(String key, ListenDataLambda listenDataLambda){
            listenDataLambda.Listen(map.get(key));
            listenDataLambdaMap.put(key, listenDataLambda);
        }
        public String setKey(String key,String value){
            if(listenDataLambdaMap.get(key) != null){
                listenDataLambdaMap.get(key).Listen(value);
            }
            return map.put(key,value);
        }
    }
    @FunctionalInterface
    interface ListenDataLambda{
        void Listen(String value);
    }
    

    思考

    • 代码只是思路实现,应该有很多成熟的库支持数据同步的功能
    • 没有实现close方法,实现页面关闭后注销自己的lambda方法
    • 可以通过反射机制实现lambda的唯一key,这样注销和添加都没问题了
    • 应该是使用js才想起来java可以通过这个方法进行数据同步的
    如果觉得文章对您有帮助,希望您能 关注+推荐 哦
  • 相关阅读:
    9、Spring Boot 2.x 集成 Thymeleaf
    【专题】Spring Boot 2.x 面试题
    8、Spring Boot 2.x 服务器部署
    7、Spring Boot 2.x 集成 Redis
    6、Spring Boot 2.x 集成 MyBatis
    5、Spring Boot 2.x 启动原理解析
    4、Spring Boot 2.x 自动配置原理
    3、Spring Boot 2.x 核心技术
    2、Spring Boot 2.x 快速入门
    centOS下安装JDK1.8.60,glassfish4.1.1以及MySQL
  • 原文地址:https://www.cnblogs.com/xiaqiuchu/p/15244762.html
Copyright © 2011-2022 走看看