设计模式之策略模式(Strategy)详解及代码示例
摘要:一、策略模式的定义 策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。 二、策略模式优缺
阅读全文
posted @
2020-03-31 22:12
kosamino
阅读(4223)
推荐(0) 编辑
设计模式之模板方法模式(Template Method)详解及代码示例
摘要:一、模板方法模式的定义与特点 模板方法(Template Method)模式的定义如下:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。它是一种类行为型模式。 二、模板方法模式优缺点 该模式的主要优点如下。 它封装了不变部分,
阅读全文
posted @
2020-03-31 20:07
kosamino
阅读(992)
推荐(0) 编辑
设计模式之享元模式(Flyweight)详解及代码示例
摘要:一、享元模式的定义 享元(Flyweight)模式的定义:运用共享技术来有効地支持大量细粒度对象的复用。它通过共享已经存在的又橡来大幅度减少需要创建的对象数量,避免大量相似类的开销,从而提高系统资源的利用率。 String常量池、数据库连接池、缓冲池等等都是享元模式的应用,所以说享元模式是池技术的重
阅读全文
posted @
2020-03-31 07:07
kosamino
阅读(1344)
推荐(0) 编辑
设计模式之桥接模式(Bridge)详解及代码示例
摘要:一、桥接模式的定义 桥接(Bridge)模式的定义如下:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。 比如设想如果要绘制矩形、圆形、椭圆、正方形,我们至少需要4个形状类,但是如果绘制的图形需要具有不同的颜色,如红色、绿色、蓝色等
阅读全文
posted @
2020-03-31 06:02
kosamino
阅读(3387)
推荐(0) 编辑
设计模式之组合模式(Composite)详解及代码示例
摘要:一、组合模式的定义 组合(Composite)模式的定义:有时又叫作部分-整体模式,它是一种将对象组合成树状的层次结构的模式,用来表示“部分-整体”的关系,使用户对单个对象和组合对象具有一致的访问性。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。 聚合与组合都是表示整体和个体的关联关系
阅读全文
posted @
2020-03-31 05:23
kosamino
阅读(3117)
推荐(1) 编辑
设计模式之外观模式(Facade)详解及代码示例
摘要:一、外观模式的定义 外观(Facade)模式的定义:又叫门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。 二、外观模式优缺点 优点
阅读全文
posted @
2020-03-31 02:57
kosamino
阅读(2665)
推荐(1) 编辑
设计模式之装饰模式(Decorator)详解及代码示例
摘要:一、装饰模式的定义 装饰(Decorator)模式的定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。 二、装饰模式优缺点 装饰(Decorator)模式的主要优点有: 采用装饰模式扩展对象的功能比采用继承方式更加灵活。 可以设计出多个
阅读全文
posted @
2020-03-31 02:19
kosamino
阅读(1733)
推荐(0) 编辑
设计模式之适配器模式(Adapter)详解及代码示例
摘要:一、适配器模式的定义 适配器模式(Adapter)的定义如下:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。 适配器模式分为类结构型模式和对象结构型模式两种:在类适配器模式中,适配器与适配者之间是继承(或实现)关系;在对象适配器模式中,适配器与适
阅读全文
posted @
2020-03-30 19:51
kosamino
阅读(4653)
推荐(0) 编辑
设计模式之代理模式(Proxy)详解及代码示例
摘要:一、代理模式的定义 代理模式的定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介,代理模式也叫做委托模式。 二、为什么使用代理模式 中介隔离作用:在某些情况下,一个客户类不想或者不能直接引用一个委托对
阅读全文
posted @
2020-03-30 04:51
kosamino
阅读(2731)
推荐(1) 编辑
设计模式之原型模式(Prototype)详解及代码示例
摘要:一、原型模式的定义与特点 原型(Prototype)模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。它属于创建型设计模式,用于创建重复的对象,同时又能保证性能(用这种方式创建对象非常高效)。 这种模式是实现了一个原型接口,该接口用于创建当前对象的克
阅读全文
posted @
2020-03-30 02:05
kosamino
阅读(3010)
推荐(0) 编辑
设计模式之建造者模式(Bulider模式)详解及代码示例
摘要:一、建造者模式的定义与特点 建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。建造者模式属于创建型设计模式,它是将一个复杂的对象分解为多个简单的对象,使用多个简单的对象一步一步构建成一个复杂的对象。它将变与不
阅读全文
posted @
2020-03-30 00:02
kosamino
阅读(1065)
推荐(0) 编辑
设计模式之工厂模式(3种)详解及代码示例
摘要:工厂模式划分来说总共有三类:简单工厂模式、工厂方法模式和抽象工厂模式。其中简单工厂模式不输入23种设计模式之一,但他们又都属于创建型模式。我们依次讲解这三种工厂模式。 一、简单工厂 1、什么是简单工厂模式? 首先来说简单工厂,简单工厂模式,又叫做静态工厂模式(Static Factory Metho
阅读全文
posted @
2020-03-29 22:25
kosamino
阅读(9513)
推荐(1) 编辑
设计模式之单例模式详解及代码示例
摘要:一、什么是单例模式 单例模式的定义就是确保某一个类只有一个实例,并且提供一个全局访问点。属于设计模式三大类中的创建型模式。单例模式具有典型的三个特点 单例类只有一个实例对象; 该单例对象必须由单例类自行创建; 单例类对外提供一个访问该单例的全局访问点; 类图如下: 单例模式优缺点 优点:由于单例模式
阅读全文
posted @
2020-03-29 04:00
kosamino
阅读(2105)
推荐(1) 编辑
设计模式之7原则及其示例说明
摘要:在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据一些原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。 我们常见有 7 条原则,设计模式之禅这本书中概括为6原则,我们本博客就以7原则来进行说明: 开闭原则 单一职责原则 里氏替换原则 依
阅读全文
posted @
2020-03-26 20:29
kosamino
阅读(628)
推荐(0) 编辑
设计模式之合成复用原则示例
摘要:我们以汽车分类管理程序为例来介绍合成复用原则的应用。 分析:汽车按“动力源”划分可分为汽油汽车、电动汽车等;按“颜色”划分可分为白色汽车、黑色汽车和红色汽车等。如果同时考虑这两种分类,其组合就很多。如图所示是用继淨:关系实现的汽车分类的类图。 从图中可以看出用继承关系实现会产生很多子类,而且增加新的
阅读全文
posted @
2020-03-26 20:28
kosamino
阅读(1034)
推荐(0) 编辑
设计模式之迪米特法则示例
摘要:如一个明星与经纪人的关系实例。明星由于全身心投入艺术,所以许多日常事务由经纪人负责处理,如与粉丝的见面会,与媒体公司的业务洽淡等。这里的经纪人是明星的朋友,而粉丝和媒体公司是陌生人,所以适合使用迪米特法则,其类图如图所示。 程序代码如下: public class LoDtest { public
阅读全文
posted @
2020-03-26 20:14
kosamino
阅读(853)
推荐(0) 编辑
设计模式之接口隔离原则示例
摘要:如本例学生成绩管理程序,学生成绩管理程序一般包含插入成绩、删除成绩、修改成绩、计算总分、计算均分、打印成绩信息、査询成绩信息等功能,如果将这些功能全部放到一个接口中显然不太合理,正确的做法是将它们分别放在输入模块、统计模块和打印模块等 3 个模块中,其类图如图所示: 源码如下: public cla
阅读全文
posted @
2020-03-26 19:39
kosamino
阅读(632)
推荐(0) 编辑
设计模式之依赖倒置原则示例
摘要:我们来写一个关于司机开车的示例,假设我们现在有个司机,可以开车,然后有一辆奔驰,于是就可以让车跑起来。 public class Driver { // 司机职责就是驾驶汽车 public void drive(Benz benz) { benz.run(); } } public class Be
阅读全文
posted @
2020-03-26 19:06
kosamino
阅读(545)
推荐(0) 编辑
设计模式之里氏替换原则示例
摘要:里氏替换原则强调的是设计和实现要依赖于抽象而非具体;子类只能去扩展基类,而不是隐藏或者覆盖基类,它包含4层含义. 一、里氏替换4原则 1、子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法,父类中凡是已经实现好的方法(相对于抽象方法而言),
阅读全文
posted @
2020-03-26 16:10
kosamino
阅读(3421)
推荐(1) 编辑
设计模式之开闭原则示例
摘要:以一个关于课程的例子展示开闭原则: /** * 定义课程接口 */ public interface ICourse { String getName(); // 获取课程名称 Double getPrice(); // 获取课程价格 Integer getType(); // 获取课程类型 } /
阅读全文
posted @
2020-03-26 15:41
kosamino
阅读(3135)
推荐(2) 编辑
Netty学习之实战WebSocket框架
摘要:说到WebSocket技术,其实源于服务器推送技术,在现实中很多时候需要的数据是不断变化的,比如股市数据、聊天软件,因此就需要一种客户端想要在不刷新页面的情况下实时获取到服务器端最新数据的技术,而以往的数据获取都是基于客户端主动请求,服务端返回对应数据。因此就有了服务器推送技术。 服务器推送技术主要
阅读全文
posted @
2020-03-26 05:33
kosamino
阅读(7827)
推荐(0) 编辑
Netty学习之实战RPC框架
摘要:先附上GitHub地址:https://github.com/kosamino/netty-root/tree/master/ym-netty-rpc RPC的实现方式是本地通过远程代理对象调用远程服务。在互联网应用场景中,单体服务极度缺乏弹性伸缩能力,在大规模开发团队中也不便于开发管理。所以往往会
阅读全文
posted @
2020-03-26 03:37
kosamino
阅读(593)
推荐(0) 编辑
Netty学习之编解码器
摘要:如果将消息看作是对于特定的应用程序具有具体含义的结构化的字节序列—它的数据。那么编码器是将消息转换为适合于传输的格式(最有可能的就是字节流);而对应的解码器则是将网络字节流转换回应用程序的消息格式。 在了解Netty编解码之前,先了解Java的编解码: 编码(Encode)称为序列化, 它将对象序列
阅读全文
posted @
2020-03-24 15:25
kosamino
阅读(809)
推荐(0) 编辑
Netty学习之粘包、半包
摘要:一、什么是粘包、半包 1、粘包半包场景重现 来做这么一个测试,在Netty客户端发送数据到Netty服务端,代码如下: public void channelActive(ChannelHandlerContext ctx) throws Exception { for (int i = 0; i
阅读全文
posted @
2020-03-23 20:18
kosamino
阅读(773)
推荐(0) 编辑
Netty学习之核心组件ByteBuf及API
摘要:Netty提供的ByteBuf不同于JDK中NIO的ByteBuffer,ByteBuf是netty中数据传输的容器,是Netty自己实现的,作为NIO ByteBuffer的替代品,提供了更好的API供开发者使用。相较于NIO的ByteBuffer更具有卓越的功能性和灵活性。具体NIO的ByteB
阅读全文
posted @
2020-03-23 18:32
kosamino
阅读(1533)
推荐(0) 编辑
Netty学习之核心组件ChannelPipeline
摘要:ChannelPipeline 提供了ChannelHandler 链的容器,并定义了用于在该链上传播入站和出站事件流的API。ChannelPipeline不是单独存在,它肯定会和Channel、ChannelHandler、ChannelHandlerContext关联在一起。 一、Channe
阅读全文
posted @
2020-03-19 20:06
kosamino
阅读(660)
推荐(3) 编辑
Netty学习之核心组件(AbstractBootstrap、Bootstrap、ServerBootstrap)
摘要:Netty的核心组件的设计都很模块化,如果想要实现一个应用程序,就需要将这些组件组装到一起。Netty通过Bootstrap类,以对一个Netty应用程序进行配置(组装各个组件),并最终使它运行起来。对于客户端程序和服务器程序所使用到的Bootstrap类是不同的,后者需要使用ServerBoots
阅读全文
posted @
2020-03-19 05:25
kosamino
阅读(1701)
推荐(0) 编辑
Netty学习之核心组件(EventLoop、EventLoopGroup)
摘要:一、EventLoop、EventLoopGroup概述 由下图所示,NioEventLop是EventLoop的一个具体实现,EventLoop是EventLoopGroup的一个属性,NioEventLoopGroup是EventLoopGroup的具体实现,都是基于ExecutorServic
阅读全文
posted @
2020-03-18 05:17
kosamino
阅读(2885)
推荐(1) 编辑
Netty学习之Demo搭建
摘要:如下所示,我们写一个简单的Netty Demo,实现客户端与服务端进行通讯。 1、Netty 服务端启动类 /** * (1)、 初始化用于Acceptor的主"线程池"以及用于I/O工作的从"线程池"; * (2)、 初始化ServerBootstrap实例, 此实例是netty服务端应用开发的入
阅读全文
posted @
2020-03-18 04:20
kosamino
阅读(3857)
推荐(2) 编辑
Netty学习之Reactor线程模型
摘要:一、什么是Reactor模型 Reactor设计模式是event-driven architecture(事件驱动)的一种实现方式。Reactor会解耦并发请求的服务并分发给对应的事件处理器来处理。 目前,许多流行的开源框架都用到了Reactor模型。如:netty、node.js等,包括java的
阅读全文
posted @
2020-03-15 17:39
kosamino
阅读(2679)
推荐(0) 编辑