
java
月凉西厢
穷且益坚,不坠青云之志
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Netty4源码分析——服务器启动
netty4线程模型netty4服务器端的启动是由ServerBootstrap引导的,启动代码如下public class TimeServer { public void bind(int port) throws Exception { EventLoopGroup bossGroup = new NioEventLoopGroup();原创 2015-07-28 09:56:21 · 1014 阅读 · 0 评论 -
策略模式
核心思想:定义算法族,让族内算法可以相互替换,使得算法独立于使用的客户。例程参照了《Head First》,建立一个鸭子的类群假设这群鸭子中:有些鸭子会飞有些不会,有些鸭子会叫有些则不会,但是所有鸭子都会游泳。最初会想到让所有鸭子继承一个抽象的超级鸭类。如下:可以看到这样所有的鸭子都会游泳都会叫都会飞,这显然不能满足要求(因为有些鸭子不会飞,有些鸭子不会叫),当然,可以在特殊的原创 2015-08-13 11:05:06 · 320 阅读 · 0 评论 -
观察者模式
这个模式从字面上就很好理解了:肯定有一个观察的对象,然后有一群观察者。观察者模式我觉得更像是一种通知模式,当对象发生变化是,通知所有的观察者。依然参用《Head First》的例子:有一个气象站,测量温度(Temperature),湿度(Humidity),气压(Pressure)三个参数,有三个显示设备(观察者)。首先可以分析一下:1,肯定需要一个可供观察的对象WeatherDa原创 2015-08-13 12:36:11 · 336 阅读 · 0 评论 -
抽象工厂模式
简单工厂将字符串判断交给了工厂工厂方法模式不同的工厂创建了不同的产品接着Pizza的例子,假设createPizza()只是得到了Pizza,交给客户之前这个pizza还需要做一些其他的工序,如撒点肉松、包装等(这里将这些操作统一叫做prepare())。而这些prepare在纽约店和在芝加哥店都是不一样的。那怎么办?抽象工厂代码如下:首先是Pizza超类,可以看到拥有一个保护的 Pi原创 2015-08-13 14:00:08 · 340 阅读 · 0 评论 -
java并发编程实战笔记(1)——代码可能不会依次执行
首先看程序/** * Created by sgzhang on 2015/8/14. */public class NoVisibility { private static boolean ready; private static int number; private static class ReaderThread extends Thread{原创 2015-08-14 09:17:23 · 615 阅读 · 0 评论 -
命令模式
有时候必须向某个对象提交请求,但是却并不知道关于被请求操作或请求的接收者的任何信息。命令模式的关键是一个抽象的Command类或接口。这个Command抽象类(或接口)里面包含了一个执行命令的方法execute()。这个方法由具体Command去实现。假设有一个遥控器,它有四个按钮,需要将其中的两个设计为灯(Light)的开、关,另外两个控制收音机(Video)的开、关。在这个例子中遥原创 2015-08-14 16:38:11 · 436 阅读 · 0 评论 -
单件模式
我们知道,一般类的构造方法都应该申明为public,这样这个类才能被创建实例。这样的类在外部可以创建多个实例。如果想避免类被重复实例化,就需要强制手段了。显然,把这个类声明为静态的就可以了,但这样做这个类存在于整个程序的生命周期,并不好。我们真正需要的是,像普通类那样在用到的时候才被实例化。可以想到将类的构造函数声明为私有的,然后以一个类内的静态函数去调用这个构造函数并返回实例。如下pac原创 2015-08-14 17:26:56 · 479 阅读 · 0 评论 -
适配器模式
适配器模式可以将一个类的接口转换成客户希望的另一个接口。当然,前提是这个类有能力实现客户希望的那些功能,否则转换毫无意义。现假设有一个Duck接口,它只要两个方法,定义如下:package Adaptor;/** * Created by sgzhang on 2015/8/17. */public interface Duck { void quack(); v原创 2015-08-17 13:32:10 · 380 阅读 · 0 评论 -
装饰者模式
装饰者模式可以动态的给一个对象添加一些额外的职责。假设你去饮料店,要了一杯加Milk和Soy的espresso。想象一下柜台是怎样给你打印发票和计算价钱的呢?饮料店可是有很多主饮和配料的,基本可以随意加配料。显然不可能为每一种组合都建立一个类。那怎么办?先从主函数开始分析:package Decorator;/** * Created by sgzhang on 2015/8/17.原创 2015-08-17 14:55:16 · 359 阅读 · 0 评论 -
工厂方法模式
核心:只持有抽象的接口引用,由子类去决定实例的创建,将实例化推到子类中去。同样采用Pizza的例子,当纽约(NY)和芝加哥(Chicago)都开了pizza店,且者两个地方的同类型Pizza味道不同。可以构建如下类:可以看到createPizza在父类中申明为抽象的,用户首先得创建一个店,NYPizzaStore store,当用户调用AbstractPizzaStore.orde原创 2015-08-13 13:16:58 · 398 阅读 · 0 评论 -
简单工厂模式
简单工厂模式将对象的实例方法了工厂中创造,程序比较简单,只是将原本应该出现在客户程序的判断放到了工厂中,参照《Head First》的例子,有一个PizzaStore卖各种口味的Pizza。//PizzaStore 它的orderPizza只返回一个抽象的Pizza,而具体的实例交有工厂去处理package Factory.SimpleFactory;/** * Created by原创 2015-08-13 13:02:10 · 348 阅读 · 0 评论 -
netty4源码分析——写操作
跟踪netty的写操作如下:参考网上的有关文章,我画了一个框图描述netty4的写操作流程大致如下:原创 2015-07-28 10:23:39 · 617 阅读 · 0 评论 -
我理解的java多态
java多态可以改善nxin代码的组织结构和可读性;有利于创建可扩展的程序java的多态是建立在后期绑定技术(运行时绑定)的基础上的。《java编程思想》中有提到这种技术的基本原理是在对象中安置某种“类型信息”,而java除了少量的前期绑定外基本上都是后期绑定。假设有一个基类CShape,它有一个抽象方法draw() ,Circle类从CShape继承而来并实现了自己的draw()。通常可原创 2015-07-28 17:06:10 · 522 阅读 · 0 评论 -
netty4源码分析——pipeline关联
无论是Bootstrap还是ServerBootstrap都需要经历AbstractBootstrap.initRegister():可以看出,在服务端或客户端的引导过程中就已经分别实例化了一个channel,对于服务端,这个应该是负责Acceptor的,对于客户端应该是负责connect,一个socket对应一个channel,而channel在构造函数中默认创建一个Pipeli原创 2015-07-28 10:09:32 · 548 阅读 · 0 评论 -
mina2源码浅析——服务端的启动
一个最佳简单的mina服务器程序如下:Mina服务器的开启过程中首先new 了一个NioSocketAccpetor()对象,其构造过程主要完成了如下操作:1)new了一个默认的SocketSession配置,并在NoSocketAcceptor的父类和祖父类中完成了Session的参数配置如下:2)在其父类AbstractPoolingIOAcceptor的构造方原创 2015-07-28 09:05:12 · 738 阅读 · 0 评论 -
mina源码浅析——读写发操作
1)mina的读操作:从有关线程的类一直通过过滤器链传递到业务逻辑出力的IOHandler,如下:其中Entry是可以认为是IOFilter的进入接口,其具体实现为EntryImpl类。两者有点类似于Netty中Handler与HandlerContext,都有点象是包裹关系。也可以起到为filter起名的作用。(构成name-filter对)2)Mina的写操作:Mi原创 2015-07-28 09:28:25 · 1417 阅读 · 0 评论 -
Netty4源码分析——框架总结
我画了一个框架图便于理解netty4框架 看一看出,在netty4中关键的是要理解NioEventLoop、EventLoopGroup:1,NioEventLoopGroup实际上就是个线程池2,NioEventLoopGroup在后台启动了n个NioEventLoop来处理Channel事件3,每一个NioEventLoop负责处理m个Channel4,NioEve原创 2015-07-28 12:51:44 · 1575 阅读 · 0 评论 -
mina源码浅析——总结
1)Mina的核心类主要功能:(以最核心的类命名类组) IOBuffer类组提供缓冲区IOSession类组提供连接状态IOFilterChain类组事件和请求的拦截和过滤IOHandler类组处理业务逻辑IOFuture类组用于实原创 2015-07-28 09:50:10 · 566 阅读 · 0 评论 -
struts2的HelloWorld
初学struts2,想写一个简单的helloworld程序,结果遇到好多问题。IDE:IntelliJ 14网上大部分的都是eclipse下面的,在IntelliJ下面还是小有不同的。程序是参照李刚的《struts2X权威指南》写的首先建立好web项目,这个可以百度一下。有详细的教程1,在web文件下新建一个Login原创 2015-08-12 09:20:23 · 380 阅读 · 0 评论 -
Java.nio中socketChannle.write()返回0的简易解决方案
之前使用Java IO实现了一个文件传送的小demo,今天打算采用java nio重写一遍。首先,用nio写好文件接收端后,采用原先的IO程序测试,发现并不存在问题。接着,写文件发送端,ByteBuffer大小设置为1024,发送端分多次发送文件片段,在接受端组合形成文件,近而写入文件系统。程序写好后:1,用一个2K的文件测试,发现并无问题2,用一个44k的文件测试,发现接收端原创 2015-09-15 11:09:19 · 5176 阅读 · 0 评论