美文网首页
设计模型

设计模型

作者: 哓晓的故事 | 来源:发表于2017-12-17 23:48 被阅读0次

    详细分析参考 设计模式

    定义:在软件开发过程中,经常出现的典型场景的典型解决方案,称为设计模式
    设计模式一般分为 (创建型|结构型|行为型)

    区别

    适配器:把一个类的接口变换成客户端所能接受的另一种接口,将接口a适配成接口b
    装饰器:在原有类接口的功能上,增加新的功能(可以封装接口,也可以增加接口),原有接口a,新增接口b

    Reactor 模式

    事件驱动的,有一个或多个并发输入源,有一个Service Handler,有多个Request Handlers

    image.png
    类似生产者消费者模式,即有一个或多个生产者将事件放入一个Queue中,而一个或多个消费者主动的从这个Queue中Poll事件来处理;而Reactor模式则并没有Queue来做缓冲,每当一个Event输入到Service Handler之后,该Service Handler会主动的根据不同的Event类型将其分发给对应的Request Handler处理IO就绪事件
    1. 依赖于非阻塞IO
    2. 使用多路复用器监管海量IO的就绪事件
    3. 使用boss线程work线程池分离IO事件的监测IO事件的处理

    Proactor 模式

    Request Handler处理IO完成事件

    Adaptor 适配器模式(结构型)

    抽象的类名,具体实现的类名继承这个类名,加上自己的实现,这种方式就是适配器模式( 根据不同选择输出不同数据结构 )

    052283DE-A43D-4A48-B74E-B607F8F8B208.png
    参考
    java.io.Reader
    - InputStreamReader
    - StringReader

    Reader统一提供read方法,不同的InputStream或者String实现继承实现自己的方法,并且内部封装特殊请求方法,由适配器根据不同实现对象,调用特殊的实现方法

    Decorator 装饰者模式(结构型)

    本身是一种类型,保持类型接口不变,又能对该类型的其他子类进行加强的能力,就叫适配器模式( 根据不同选择对原有的数据进行增强 )

    AFDA0233-4F67-43F6-A03C-D1240B970589.png
    参考
    java.io.Reader
    - BufferedReader

    Strategy 策略模式

    定义一个接口,不同的策略实现这个接口
    根据不同的选择,选择不同的实现策略(结合模板、简单工厂)

    Simple Factory 简单工厂模式(创建型)

    传入一个判断条件给工厂,工厂根据条件决定本身输出,输出的是抽象的Product,工厂内部含有全部的具体Product

    image.png
    缺点:
    • 只生产Product,Product的实现过程交由Client自己实现,将Product的实现和使用耦合
    • 不具有Product生产后续操作,由Client决定操作
    • 如图:Client的 doSomething() 方法如果操作simpleFactory.create出来的Product无法控制
    • 简单工厂将全部Product收敛在一个地方,逻辑条件复杂,无法有些归类
    • 当有100个类时候,并且有3大类,会出现300种逻辑判断

    Factory Method 工厂方法模式(创建型-着重在定义类)

    AbstractClient 定义了获取的类(AbstractProduct)获取过程的接口(doSomething),doSomething 操作的具体Product对象生产由子类(AClient/BClient)决定

    image.png
    • Client和Product是属于同一层级
    • doSomething对外直接提供方法,createProduct则为abstract由子类实现

    优点:

    • AbstractClient使用继承的方式,把对象的创建委托给子类,自身定义一个对象的类定义,解耦Product的实现和使用
    • 通过定义获取接口,具体的类对象实现,通过继承此工厂的具体工厂来实现

    相关文章

      网友评论

          本文标题:设计模型

          本文链接:https://www.haomeiwen.com/subject/wnveixtx.html