• 设计模式的思考


    设计模式的思考

    设计模式

    接口选择问题。主要是为了动态实例化 。 工厂模式,不就是 字符串 -> 子类实例化。 还是用抽象来封装 差异性,我们的代码 就可以一对多。

    创建对象型、结构型模式、行为型模式

    设计模式分类原理:看我们怎么用这个抽象类了。关键都是 搞出一个抽象类出来,来屏蔽多个具体类。分类就看我们怎么用这个抽象类。

    1. 工厂模式。如果我们需要这个抽象类返回一个 对象给我们用,那就是创建对象型。
    2. 策略模式。如果我们需要这个抽象类,直接执行这个抽象类的方法,那么就是行为类。
    3. 桥接模式,就是类结构模式。会有两个抽象类,抽象类之间的关系是引用和被引用。
    分类型模式我们怎么用?原有方式新增类和方式特点
    创建型工厂模式返回一个抽象对象直接实例化产品类增加两个抽象类 - 工厂类和产品类。来抽象各种产品。原本是直接实例化产品类的。现在多了一层抽象,经过工厂类再实例化。多了一层之后,就相当于hack了,就可以屏蔽差异。抽象出 类类型(一个抽象类)
    行为型策略模式调用抽象方法 来执行任务直接调用实例方法。增加一个抽象接口类。来抽象不同的方法策略。抽象出 类行为(一个抽象接口类)
    结构型桥接模式调用抽象方法 来绑定 类关系直接绑定 宿主类和寄生类 的关系增加两个抽象类 - 抽象宿主类和抽象寄生类。用于抽象各种宿主,抽象各种寄生类。可以屏蔽各种绑定关系。抽象出 类关系。会有两个抽象类,抽象类之间的关系是引用和被引用。适配器模式会抽象出一个适配类,
    适配模式类无法直接调用另一类的方法。需要派生一个适配类间接调用。增加一个抽象适配类,使得类可以经过适配类来调用另一个类。增加一个包装类。

    策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。

    基本思维方式工具

    抽象、封装、接口与实现分离。通过抽象,来屏蔽差异性,降低复杂度。

    12.x eth 就是适配模式

    事实上,12.x就是做适配的事情,因为驱动本身就是可以用的,我们要在此之上封装一层,对接eth-logic的结构方式。适配类就是 eth_phy_port_info 。

    adapter是要屏蔽 管理口和带外口的差异。

    都要以结构体为 中心 交互对象。不要看函数调用。

    C语言中的第一个结构体指针,一般都是表征为this指针,但有时候不是,比如适配类这边,就是传一个 待适配的对象而已。

    适配类 就要在

    eth_adapter_ioctl_cmd_upd_counter 这层都不用初始化的。算是接口类的。根本就不用 类根本不用赋能给对象。

    这个抽象是怎么抽象的呢

    执行不同的代码么?

    究竟是 对象的特有数据,还是类的特有数据

    但是适配的时候,有些数据又要重写。真是个问题

    类关系的表述

    依赖>关联>聚合>组合

    参数还是实例化。匿名还是具名。

    主要还是 结合对象的生存周期 和 存储位置 来看。

    • 关联的两个对象,被关联对象 只是局部对象。
    • 聚合的两个对象,各自的生命周期是无关的。
    • 组合的两个对象,两个的生命周期是绑定在一起的。
    关联方式关系的存在周期关系信息的存储被动对象的生命周期可见性状态关系的表征:属性关系的表征:方法调用举例:存储位置
    依赖方法调用方法函数帧各自无关或方法调用周期内局部匿名方法的参数、局部对象、返回值
    关联建联后到对象消亡对象属性各自无关全局可见属性:引用NA链表 。
    聚合建联后到对象消亡对象属性各自无关且持久全局可见属性:引用g/setter方法在该对象内,改变另一对象的状态。
    组合对象的生命周期对象属性绑定一起仅互相可见属性:成员对象或类g/setter方法

    关联包含聚合和组合。

    参考:

    • https://blog.csdn.net/K346K346/article/details/59582926
    • https://stackoverflow.com/questions/885937/what-is-the-difference-between-association-aggregation-and-composition

    关系的存在周期 和 对象的生命周期 是不一致的。

    关联只是留下一个指针而已,留下一个引用而已,指向另一个对象而已。 将两个对象关联起来,就是互相留下电话号码而已,这是个长久的联系方式。依赖,就是陌生人 就合作下,不电话 就走了。再也不见。依赖这个东西的存在,

    什么是有机整体,什么是互相影响? 两个状态机之间的额状态互相影响。

    和上层业务交互的一层。

    和客户端交互的代码肯定要是抽象层的代码。业务交互框架层。

    上层逻辑端口也是有一定的多样性的,我们也应该有所屏蔽的处理,所以要多一个抽象层。所以一般模块都要两层抽象层,中间一个适配层。这就是子模块的最小单位啦。

    适配类是抽象类么

    其实比较要桥接模式。桥接模式就是 再 加一层抽象吧

    所以这个 不叫作适配吧。 如果 把 net_device算进来,那就算适配了,但是没有! 我们直接绕过netdevice的话,就不叫适配类了吧。 适配蕴含的意思是 要去兼容现有的东西。

    做一些 hack的操作,控制通路的过滤、拦截和转发 就可以了,就当做一个中转站而已。

    适配+改造。

    控制路完全可以采用 net_device的接口。

    数据路我们自己 要改造下。

    装饰者模式更加灵活啊,相比组合集成的方式。

    外观是对内部子类的方法 进行排列组合封装下。

    应该快转这边 统一管理协议栈才对啊。 但是现在是通路从我们这边捞 数据奥。

    eth_adap_rg_rx_enqueue 这个接口的位置不对,应该放在frame层。

    行为模式:对象间的交互方式。UML主要的交互方式就是 关联。对象之间的关系。

    行为模式,如何调用方法的。怎么交互。

    结构模式: 代码怎么拆解模块。模块 要怎么拆解来解耦。模块怎么拆解子模块。 输入输出 怎么拆解,业务需求对应到模块内部怎么拆解,模块内部 怎么交互。结构拓扑。

    行为模式:平等对象之间的联系。要怎么通信。N个对象的对通信有N*N种情况。每个对象都要保存其他对象的引用,太浪费了

    结构模式:有部分类不变的情况下,对象怎么组合? 一开始就要准备好

    建造模式:有需要时 按需生成对象。

    关联形式各个对象的生命周期方式
    建造模式关联子类在主类中实例化,子类脱胎于母类。
    结构模式聚合有依赖。持有一个对象。拥有被适配类所有功能
    行为模式关联对象间的 生命周期无关 平等的生命,大家只是通信而已只调用部分方法。
  • 相关阅读:
    互联网大厂ssp面经,数据结构part2
    Dart 3.2 更新,Flutter Web 的未来越来越明朗
    【动手学深度学习】课程笔记 00-03 深度学习介绍及环境配置
    使用Packet Tracer了解网络模型及Lab3 - 1
    “顶梁柱”滑坡、新增长极难担重任,阿里“蹲下”是为了跳更高?
    加密磁盘密钥设置方案浅析 — LUKS1
    【HCIP-Datacom】 IS-IS基础 ISIS动态路由协议配置(ISIS思维导图在底部)
    torch
    小程序端自定义导航栏-样式适配-安全距离
    ZooKeeper技术内幕
  • 原文地址:https://blog.csdn.net/qq_20679687/article/details/127652151