设计模式

文章目录

    • 单例模式
    • 组合模式
    • 观察者模式
    • 工厂模式
        • 抽象工厂模式
    • 策略模式
    • 代理模式
    • 适配器模式

       设计模式的定义:在面向对象软件设计过程中针对特定问题的简洁而优雅的解决方案。
       GoF提出的23种软件设计模式,这里介绍几种常用的设计模式。

单例模式

设计模式_第1张图片
       单例模式的定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。实现的方法为先判断实例存在与否,如果存在则直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象。
示例代码如下:


       单例模式的适用场景:一个单一对象。比如:弹窗,无论点击多少次,弹窗只应该被创建一次,就像微信PC版。

组合模式

       组合模式的特点:
       1.组合模式在对象间形成树形结构;
       2.组合模式中基本对象和组合对象被一致对待;
       3.无须关心对象有多少层, 调用时只需在根部进行调用。
       想象我们现在手上有个万能遥控器, 当我们回家, 按一下开关, 下列事情将被执行:
       1.煮咖啡
       2.打开电视、打开音响
       3.打开空调、打开电脑
我们把任务划分为 3 类, 效果图如下:
设计模式_第2张图片
示例代码如下:


       可以看出在组合模式中基本对象和组合对象被一致对待, 所以要保证基本对象(叶对象)和组合对象具有一致方法。

观察者模式

       核心思想:观察者只要订阅了被观察者的事件,那么当被观察者的状态改变时,被观察者会主动去通知观察者,而无需关心观察者得到事件后要去做什么,实际程序中可能是执行订阅者的回调函数。
       Observer模式是行为模式之一,它的作用是当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态,或者说执行对应对象的方法。
       这种设计模式可以大大降低程序模块之间的耦合度,便于更加灵活的扩展和维护。
       场景、当观察的数据对象发生变化时, 自动调用相应函数。比如 vue 的双向绑定。
示例代码如下:


工厂模式

       工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。js中构造函数就是工厂。
设计模式_第3张图片
设计模式_第4张图片
示例代码如下:


抽象工厂模式

       抽象工厂模式:流程==》 先设计一个抽象类,这个类不能被实例化,只能用来派生子类,最后通过对子类的扩展实现工厂方法。
示例代码如下:


策略模式

       策略模式的定义:定义一系列的算法,把他们一个个封装起来,并且使他们可以相互替换。
       策略模式的目的就是将算法的使用算法的实现分离开来。
       一个基于策略模式的程序至少由两部分组成。第一个部分是一组策略类(可变),策略类封装了具体的算法,并负责具体的计算过程。第二个部分是环境类Context(不变),Context接受客户的请求,随后将请求委托给某一个策略类。要做到这一点,说明Context中要维持对某个策略对象的引用。
示例代码如下:


代理模式

设计模式_第5张图片
       js中的事件委托就是典型的代理模式。需要将自己的事情由中介去完成的就是代理模式。

示例代码如下:


适配器模式

设计模式_第6张图片
       适配器模式主要就是解决两个接口之间不匹配的问题,比如苹果电脑上没有网线插口,需要讲雷电借口或者USB借口转化为网线插口。
示例代码如下:


你可能感兴趣的:(知识点)