详细分析参考 设计模式
定义:在软件开发过程中,经常出现的典型场景的典型解决方案,称为设计模式
设计模式一般分为 (创建型|结构型|行为型)
区别
适配器:把一个类的接口变换成客户端所能接受的另一种接口,将接口a适配成接口b
装饰器:在原有类接口的功能上,增加新的功能(可以封装接口,也可以增加接口),原有接口a,新增接口b
Reactor 模式
事件驱动的,有一个或多个并发输入源,有一个Service Handler,有多个Request Handlers
类似生产者消费者模式,即有一个或多个生产者将事件放入一个Queue中,而一个或多个消费者主动的从这个Queue中Poll事件来处理;而Reactor模式则并没有Queue来做缓冲,每当一个Event输入到Service Handler之后,该
Service Handler
会主动的根据不同的Event类型将其分发给对应的Request Handler
来处理IO就绪事件
- 依赖于非阻塞IO
- 使用多路复用器监管海量IO的就绪事件
- 使用boss线程和work线程池分离IO事件的
监测
与IO事件的处理
Proactor 模式
Request Handler
来处理IO完成事件
Adaptor 适配器模式(结构型)
抽象的类名,具体实现的类名继承这个类名,加上自己的实现,这种方式就是适配器模式( 根据不同选择输出不同数据结构 )
参考
java.io.Reader
- InputStreamReader
- StringReader
Reader统一提供read方法,不同的InputStream或者String实现继承实现自己的方法,并且内部封装特殊请求方法,由适配器根据不同实现对象,调用特殊的实现方法
Decorator 装饰者模式(结构型)
本身是一种类型,保持类型接口不变,又能对该类型的其他子类进行加强的能力,就叫适配器模式( 根据不同选择对原有的数据进行增强 )
参考
java.io.Reader
- BufferedReader
Strategy 策略模式
定义一个接口,不同的策略实现这个接口
根据不同的选择,选择不同的实现策略(结合模板、简单工厂)
Simple Factory 简单工厂模式(创建型)
传入一个判断条件给工厂,工厂根据条件决定本身输出,输出的是抽象的Product,工厂内部含有全部的具体Product
缺点:
- 只生产Product,Product的实现过程交由Client自己实现,将Product的实现和使用耦合
- 不具有Product生产后续操作,由Client决定操作
- 如图:Client的 doSomething() 方法如果操作simpleFactory.create出来的Product无法控制
- 简单工厂将全部Product收敛在一个地方,逻辑条件复杂,无法有些归类
- 当有100个类时候,并且有3大类,会出现300种逻辑判断
Factory Method 工厂方法模式(创建型-着重在定义类)
AbstractClient 定义了获取的类(AbstractProduct)获取过程的接口(doSomething),doSomething 操作的具体Product对象生产由子类(AClient/BClient)决定
- Client和Product是属于同一层级
- doSomething对外直接提供方法,createProduct则为abstract由子类实现
优点:
- AbstractClient使用继承的方式,把对象的创建委托给子类,自身定义一个对象的类定义,解耦Product的实现和使用
- 通过定义类获取接口,具体的类对象实现,通过继承此工厂的具体工厂来实现
网友评论