美文网首页
架构、框架和设计模式

架构、框架和设计模式

作者: 斐硕人 | 来源:发表于2022-08-18 00:30 被阅读0次

问题

今天和实验室小伙伴说到了设计模式。

我:你们指的是 MVC、MVVM 还是?
小伙伴:这你都不知道,单例、工厂啊。
我:真不知道,不会的知识又多了一点

概念

  • 架构
    • 是什么:简单的说架构就是一个蓝图,是一种设计方案,将客户的不同需求抽象成为抽象组件,并且能够描述这些抽象组件之间的通信和调用。
    • 例子:MVC、MTV、MVP、CBD、ORM等等
  • 框架:
    • 是什么:软件框架是项目软件开发过程中提取特定领域软件的共性部分形成的体系结构,不同领域的软件项目有着不同的框架类型。框架不是现成可用的应用系统。而是一个半成品,提供了诸多服务,开发人员进行二次开发,实现具体功能的应用系统。
    • 例子:SSH
  • 设计模式:
    • 是什么:是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,它强调的是一个设计问题的解决方法。
    • 例子:工厂方法(Factory Method)模式、抽象工厂(Abstract Factory)模式、原型(Prototype)模式、单例(Singleton)模式,建造(Builder)模式

23 种设计模式

创建型 结构型 行为型
1 工厂方法(Factory Method) 6 组合(Composite)模式 13 责任链(Chain of Responsibility)
2 抽象工厂(Abstract Factory) 7 装饰(Decorator) 14 命令(Command)
3 原型(Prototype) 8 外观(Facade) 15 解释器(Interpreter)
4 单例(Singleton) 9 代理(Proxy) 16 迭代器(Iterator)
5 建造(Builder) 10 享元(Flyweight) 17 备忘录(Memento)
11 桥(Bridge) 18 中介者(Mediator)
12 适配器 (Adapter) 19 观察者(Observer)
20 访问者(Visitor)
21 状态(State)
22 策略(Strategy)
23 模版方法(Template Method)
  • 创建型设计模式

    1. 工厂方法:定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory为一个产品族提供了统一的创建接口。
    2. 抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类。也就是通常说的类方法
    3. 原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的对象。
    4. 单例模式:保证了全局只有一个实例来被访问。比如说常用的如弹框组件的实现和全局状态的实现。
    5. 建造模式:将一个复杂对象的构建与他的表示相分离,使得同样的构建过程可以创建不同的表示。
  • 结构型设计模式

    1. 组合模式:将对象组合成树形结构以表示部分整体的关系,Composite使得用户对单个对象和组合对象的使用具有一致性。
    2. 装饰模式:动态地给一个对象增加一些额外的职责,就增加的功能来说,Decorator模式相比生成子类更加灵活。
    3. 外观模式:为子系统中的一组接口提供一致的界面,Facade提供了一高层接口,这个接口使得子系统更容易使用。
    4. 代理模式:为一个对象提供一个代用品或占位符,以便控制对它的访问。比如说常见的事件代理。
    5. 享元模式:通过共享以便有效的支持大量小颗粒对象。
    6. 桥模式:将抽象部分与它的实现部分相分离,使他们可以独立的变化。
    7. 适配器模式:适配器用来解决两个接口不兼容的情况,不需要改变已有的接口,通过包装一层的方式实现两个接口的正常协作。
  • 行为型模式

    1. 职责链模式:为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。
    2. 命令模式:将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队和记录请求日志,以及支持可撤销的操作。
    3. 解释器模式:给定一个语言,定义他的文法的一个表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
    4. 迭代器模式:提供一个方法顺序访问一个聚合对象的各个元素,而又不需要暴露该对象的内部表示。
    5. 备忘录模式:在不破坏对象的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
    6. 中介者模式:指多个对象通过一个中介者进行交流,而不是直接进行交流,这样能够将通信的各个对象解耦。
    7. 观察者模式:定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知自动更新。
    8. 访问者模式:表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这个元素的新操作。
    9. 状态模式:允许对象在其内部状态改变时改变他的行为。对象看起来似乎改变了他的类。
    10. 策略模式:主要是用来将方法的实现和方法的调用分离开,外部通过不同的参数可以调用不同的策略。我主要在 MVP 模式解耦的时候用来将视图层的方法定义和方法调用分离。
    11. 模板方法:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,TemplateMethod使得子类可以不改变一个算法的结构即可以重定义该算法得某些特定步骤。

什么是 MVVM?比之 MVC 有什么区别?什么又是 MVP ?

MVC、MVP 和 MVVM 是三种常见的软件架构设计模式,主要通过分离关注点的方式来组织代码结构,优化我们的开发效率。

比如使用单页应用时,往往一个路由页面对应了一个脚本文件,所有的页面逻辑都在一个脚本文件里。页面的渲染、数据的获取,对用户事件的响应所有的应用逻辑都混合在一起,这样在开发简单项目时,可能看不出什么问题,当时一旦项目变得复杂,那么整个文件就会变得冗长,混乱,这样对我们的项目开发和后期的项目维护是非常不利的。

MVC

MVC 通过分离 Model、View 和 Controller 的方式来组织代码结构。其中 View 负责页面的显示逻辑,Model 负责存储页面的业务数据,以及对相应数据的操作。并且 View 和 Model 应用了观察者模式,当 Model 层发生改变的时候它会通知有关 View 层更新页面。Controller 层是 View 层和 Model 层的纽带,它主要负责用户与应用的响应操作,当用户与页面产生交互的时候,Controller 中的事件触发器就开始工作了,通过调用 Model 层,来完成对 Model 的修改,然后 Model 层再去通知 View 层更新。

MVP

MVP 模式与 MVC 唯一不同的在于 Presenter 和 Controller。
在 MVC 模式中我们使用观察者模式,来实现当 Model 层数据发生变化的时候,通知 View 层的更新。这样 View 层和 Model 层耦合在一起,当项目逻辑变得复杂的时候,可能会造成代码的混乱,并且可能会对代码的复用性造成一些问题。MVP 的模式通过使用 Presenter 来实现对 View 层和 Model 层的解耦。
MVC 中的 Controller 只知道 Model 的接口,因此它没有办法控制 View 层的更新,MVP 模式中,View 层的接口暴露给了 Presenter 因此我们可以在 Presenter 中将 Model 的变化和 View 的变化绑定在一起,以此来实现 View 和 Model 的同步更新。这样就实现了对 View 和 Model 的解耦,Presenter 还包含了其他的响应逻辑。

MVVM

MVVM 模式中的 VM,指的是 ViewModel,它和 MVP 的思想其实是相同的,不过它通过双向的数据绑定,将 View 和 Model 的同步更新给自动化了。当 Model 发生变化的时候,ViewModel 就会自动更新;ViewModel 变化了,View 也会更新。这样就将 Presenter 中的工作给自动化了。比如 vue 是通过使用数据劫持和发布订阅者模式来实现双向数据绑定的原理。

观察者模式和发布订阅模式有什么不同?

发布订阅模式其实属于广义上的观察者模式。
在观察者模式中,观察者需要直接订阅目标事件。在目标发出内容改变的事件后,直接接收事件并作出响应。
而在发布订阅模式中,发布者和订阅者之间多了一个调度中心。调度中心一方面从发布者接收事件,另一方面向订阅者发布事件,订阅者需要在调度中心中订阅事件。通过调度中心实现了发布者和订阅者关系的解耦。使用发布订阅者模式更利于我们代码的可维护性。

争议点

MVC到底是设计模式还是一种框架?,有人认为单例模式等设计模式应该称为设计技巧

。。。。待更新


相关文章

  1. 架构、框架、设计模式的区别
  2. 简单理解架构模式和设计模式的区别
  3. 架构、框架和设计模式关系
  4. iOS---设计模式、架构模式、框架的理解

相关文章

网友评论

      本文标题:架构、框架和设计模式

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