前端开发中常用设计模式-总结篇

 

本文是向大家介绍前端开发中常用的设计模式,它使我们编写的代码更容易被复用,也更容易被人理解,并且保证代码的稳定可靠性。


1.什么是设计模式

通俗来讲,就是日常使用设计的一种惯性思维。

因为对应的这种思维,以及对具体的业务或者代码场景,

有着具体的优势,而后成为行业中的一种“设计模式”。

2.为什么使用设计模式

设计模式是各种业务场景的最佳实践,有助于我们在写日常业务中时,提高自身的思路。例如单例模式,就可以用于登陆框,模态框等场景。每种设计模式,必然有其适合应用的场景,灵活运用设计模式,可以提高代码的可维护性,还可提升自身思维能力。

3.设计模式的基本准则

优化代码第一步:单一职责原则

让程序更稳定更灵活:开闭原则

构建扩展性更好的系统:里式替换原则

让项目拥有变化的能力:依赖倒置原则

系统有更高的灵活性:接口隔离原则

更好地扩展性:迪米特原则

4.设计模式的种类

a.创建型模式

一般用于创建对象。包括:

单例模式,工厂方法模式,抽象工厂模式,建造者模式,原型模式。

b.结构型模式

重点为“继承”关系,有着一层继承关系,且一般都有“代理”。

包括:适配器模式,桥接模式,组合模式,装饰器模式,

外观模式,享元模式,代理模式,过滤器模式

c.行为型模式

职责的划分,各自为政,减少外部的干扰。

包括:命令模式,解释器模式,迭代器模式,中介者模式,

备忘录模式,观察者模式,状态模式,策略模式,

模板方法模式,访问者模式,责任链模式



5.前端比较常用的设计模式

1.组合模式

定义:将对象组合成树形结构以表示“部分-整体”的层次结构。

class Folder {
    constructor(name) {
        this.fileName = name;
        this.children = [];
    }
    add(child) {
        this.children.push(child);
    }
    scan() {
        console.log("Folder:" + this.fileName);
        for (const child of this.children) {
            child.scan();
        }
    }
}
class File {
    constructor(name) {
        this.fileName = name;
    }
    add() {}
    scan() {
        console.log("File:" + this.fileName);
    }
}

const folder1 = new Folder("first");
folder1.add(new File("file1"));
folder1.add(new File("file2"));
const folder2 = new Folder("secend");
folder2.add(new File("file3"));
folder1.add(folder2);

folder1.scan();

这样,通过调用第一个文件夹的扫描方法就能调用所有子元素的扫描方法。

a) 组合模式在组件开发中的应用:

组合模式适合一些容器组件场景,通过外层组件包裹内层组件,这种方式在 Vue 中称为 slot 插槽,在React中为props.children,外层组件可以轻松的获取内层组件的 props 状态,还可以统一控制内层组件的渲染,组合模式能够直观反映出 父 -> 子组件的包含关系,如下最简单的组合模式例子。

<GroupPatterns>
    <GroupPatternsItem name='《React进阶实践指南》' />
    <GroupPatternsItem name='《React设计模式》' />
    <GroupPatternsItem isShow name='《React进阶实践指南》' />
    <GroupPatternsItem isShow={false} name='《Nodejs深度学习手册》' />
    <div>hello,world</div>
</GroupPatterns>

我们直观上看到 GroupPatterns 和 GroupPatternsItem 并没有做某种关联,但是却无形的联系起来。这种就是组合模式的精髓所在,这种组合模式的组件,给使用者感觉很舒服,因为大部分工作,都在开发组合组件的时候处理了。所以编写组合模式的嵌套组件,对锻炼开发者的 组件封装能力是很有帮助的。

我们通过如下代码分析组合模式原理:

// GroupPatterns.js
import React, {isValidElement} from 'react'

const GroupPatterns = (props) => {
    const handleCallback = (val) =>  {
        console.log(' children 内容:',val )
    };
    let newChilren = [];
    // 遍历children,根据属性处理每一项节点
    React.Children.forEach(props.children,(item)=>{
        const { type ,props } = item || {}
        const {isShow = true} = props || {}
        // 根据子组件属性是否展示
        if(isValidElement(item) && type.name === 'GroupPatternsItem' && isShow  ){ // 或者 type.displayName === 'Item'
            // 增强要展示的子组件,给元素添加额外props
            const enhanceElement = React.cloneElement( item , { callback:handleCallback } )
            newChilren.push(enhanceElement)
        }
    })
    console.log(' React.newChildren', newChilren, props.children)
    return newChilren
}

const GroupPatternsItem = (props) => {
    console.log('GroupPatternsItem', props) // {name: "《React进阶实践指南》", author: "alien"}
    return (
        <div 
            style={
 {
                display: 'flex', 
                flexDirection: 'column', 
                alignItems: 'flex-start', 
                textAlign:'left', 
                width: '100
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. MVC模式(Model-View-Controller) MVC模式是一种将应用程序分成三个核心部分的设计模式,分别是模型(Model)、视图(View)和控制器(Controller)。模型负责处理数据和业务逻辑,视图负责界面展示,控制器协调模型和视图之间的交互。 2. MVVM模式(Model-View-ViewModel) MVVM模式是一种基于MVC模式的设计模式,它将视图和模型之间的通信通过一个名为ViewModel的间件实现。ViewModel负责处理视图和模型之间的数据绑定和事件处理,实现了视图和模型的解耦。 3. 单例模式(Singleton) 单例模式是一种创建型模式,它保证一个类只有一个实例,并提供全局访问点。这种模式在需要全局共享资源的情况下非常有用,比如数据库连接池、线程池等。 4. 观察者模式(Observer) 观察者模式是一种行为模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,当主题对象状态发生改变时,它的所有观察者都会收到通知并更新自己的状态。 5. 策略模式(Strategy) 策略模式是一种行为模式,它定义了一系列算法,将每个算法都封装起来,使它们可以相互替换。这样,客户端可以在不改变代码的情况下选择不同的算法,从而实现不同的行为。 6. 工厂模式(Factory) 工厂模式是一种创建型模式,它定义了一个用于创建对象的接口,但是由子类决定要实例化的类是哪一个。这样,工厂方法让类的实例化推迟到了子类进行,从而实现了解耦和灵活性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值