标签 设计模式 下的文章

一文理清21种设计模式:用实例分析和对比


设计模式无论是对于最底层的的编码实现还是较高层的架构设计都有着重要的指导作用。所谓光说不练假把式,今天我就把项目中常见的应用场景涉及到的主要设计模式及其相关设计模式总结一下,用实例分析和对比的方式在一片文章中就把最常见的21种设计模式梳理清楚。

Redis发布订阅

在项目中常常使用redis的发布/订阅功能,用来实现进程间通信甚至IM等业务。
使用 jedis 实现频道订阅的模式一般如下:

try( Jedis jedis =  RedisClient.getJedis() ) {
    JedisPubSub listener = new MySubListener();
    // 订阅
    jedis.subscribe(listener, "channel");
}


后端好书阅读与推荐(续)


续前文 后端好书阅读与推荐 - Mageek`s Wonderland ,几十天过去了,又看了两本好书(还有以前看过的书),这里依然把它们总结归纳一下,加入一些自己的看法、有用的链接和可能的延伸阅读,并推荐给需要的同学。

深入理解Java虚拟机

深入理解Java虚拟机 (豆瓣) https://book.douban.com/subject/6522893/

Java怎么用,是一个问题;怎么用好是一个大问题;这么用是为什么,是一个更大的问题。搞懂这三个问题应该是每一个搞Java的人都要追求的目标,读完本书,就能把这个更大的问题搞懂了。

本书亮点:

  • 模块化是解决应用系统与技术平台越来越复杂,越来越庞大的问题的一个重要途径,也是建立各种功能的标准件的前提。
  • Java运行时数据区几个主要部分:程序计数器(可看作当前线程所执行的字节码的行号指示器)、虚拟机栈(每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程,而栈帧存储局部变量表、 操作数栈、 动态链接、 方法出口等信息)、本地方法栈(Native方法对应的栈)、(所有线程共享的一块内存区域,存放对象实例)、方法区(各个线程共享的内存区域,存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据)、常量池(方法区的一部分,存放编译期生成的各种字面量和符号引用)。
  • 对象访问方式取决于虚拟机实现而定的,目前主流的访问方式有使用句柄和直接指针两种:如果使用句柄访问的话,那么Java堆中将会划分出一块内存来作为句柄池,reference中存储的就是对象的句柄地址,而句柄中包含了对象实例数据与类型数据各自的具体地址信息;如果使用直接指针访问,reference中存储的直接就是对象地址。


AOP,MVC——Spring的学习以及对CodeIgniter的反思


AOP?原来我们早就见过

最近在学习Spring,深深地感到这个框架之所以这么流行不是没有道理的,我之前一直用的是PHP,框架用的就是codeigniter,由于其简洁轻量的特性很是让人喜爱,可是也有很多问题,然而很多问题Spring都是解决了的,比如
PHP项目中CodeIgniter使用的一些建议,这里提到的登录逻辑的实现,就是具有Spring 面向切面编程 的雏形。所以刚看到Spring的面向切面编程(AOP),就觉得:原来我们早就见过。其本质上就是关注点的分离,可以清晰的分离不同的业务逻辑,既提高了开发效率(不同的逻辑由不同的人并行书写),也利于代码维护(不用寻找遍布整个项目的log,或者验证代码)。


面向对象与设计模式


前言

大一的时候学校就开了C语言这门课,最开始糊里糊涂无从下手,后来慢慢写了几个几百行的小程序就逐渐明白编程是怎么一回事了,还以为自己都懂了(too young 啊),可是后来蹭了一节java公选课,才知道还有面向对象编程这么一回事。老师说C是面向过程的,代码超过十万行就不好组织管理了,还得要面向对象的语言才能解决这个问题。我当时仿佛发现了一个新大陆,于是就开启了自学java面向对象编程的路程。