粘包(Packet Concatenation):
拆包(Packet Fragmentation):
在网络通信中,解决粘包和拆包的问题通常需要借助协议或者特定的技术手段。上面提到的 RpcFrameDecoder
类就是使用了长度字段进行帧解码,以解决粘包和拆包问题。通过在数据包中添加长度字段,接收方可以根据长度信息准确地划分出完整的数据包。
以下是一个简单的Java实现的建造者模式的示例代码:
// 产品类
class Product {
private String part1;
private String part2;
public void setPart1(String part1) {
this.part1 = part1;
}
public void setPart2(String part2) {
this.part2 = part2;
}
@Override
public String toString() {
return "Product{" +
"part1='" + part1 + '\'' +
", part2='" + part2 + '\'' +
'}';
}
}
// 抽象建造者接口
interface Builder {
void buildPart1(String part1);
void buildPart2(String part2);
Product getResult();
}
// 具体建造者实现
class ConcreteBuilder implements Builder {
private Product product = new Product();
@Override
public void buildPart1(String part1) {
product.setPart1(part1);
}
@Override
public void buildPart2(String part2) {
product.setPart2(part2);
}
@Override
public Product getResult() {
return product;
}
}
// 指导者
class Director {
public void construct(Builder builder, String part1, String part2) {
builder.buildPart1(part1);
builder.buildPart2(part2);
}
}
// 客户端
public class BuilderPatternExample {
public static void main(String[] args) {
// 创建具体建造者
Builder builder = new ConcreteBuilder();
// 创建指导者
Director director = new Director();
// 指导建造者构建产品
director.construct(builder, "Part1", "Part2");
// 获取构建好的产品
Product product = builder.getResult();
// 打印产品信息
System.out.println(product);
}
}
在这个示例中,Product
是要构建的复杂对象,Builder
是抽象建造者接口,ConcreteBuilder
是具体建造者的实现,Director
是指导者,负责使用建造者构建产品。在客户端中,通过指导者和具体建造者来创建最终的产品。这样的设计允许你通过不同的建造者构建不同的产品,同时保持了产品的构建过程与表示的分离。
链式调用,相当于一个模板,可以换不同的产品。
先构建Product的实体类,在写一个接口类,把这个实体类的属性和方法抽离出来,
写一个实现类,这个类里面有一个new好的Product实体类,里面相当于是getter和setter方法,链式调用的话解返回this,最后还有个返回product。
指导者类:接受product对象和参数即可。