模板模式
背景:现在做着的项目需要把收到的字节流Message封装成对象,方便上层逻辑处理,但是每一条信息的格式又不完全一样,所以就想到了用模板模式来处理,其实我写的都是没有觉得这是个模板模式,后来翻书才知道..
首先是定义一个抽象父类:
/**
*
* ByteBuf是netty里的一个类,和nio里的ByteBuffer一个功能
**/
public abstract class InMessage {
private byte type;
private int struct;
private short applicationAddress;
public InMessage(byte type,int struct, short applicationAddress, ByteBuf buf) {
super();
this.type = type;
this.struct = struct;
this.applicationAddress = applicationAddress;
generateData(buf);
}
//所有继承InMessage的子类都需要重写generateData方法,这里其实才是实际上封装对象处理逻辑的地方
protected abstract void generateData(ByteBuf buf);
}
总结:
模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。