前言
在学习 策略模式 的时候,发现可以用 策略模式&代理模式 进行表单验证,之前自己一直是使用条件语句进行判断,设计模式给自己提供了很好的思路,记录一下这两种模式的大致实现。
原先的实现
1 | <form action="http://xxx.com/register" id="registerForm" method="post"> |
1 | let registerForm = document.querySelector('#registerForm') |
这样会有很多缺点:
- if-else 语句会很多,这些语句需要覆盖所有的校验规则
- 违反 “开闭原则”,如果需要增加一种新的校验规则或者更改校验规则,需要在函数内部进行修改
- 复用性很差,其他表格也需要类似的校验时,可能需要各种复制粘贴
策略模式 实现
1 | /* Validator类 */ |
代理模式 实现
策略模式 写的有点多,使用 Proxy 实现一下:(记得要装 babel 哦!)
1 | // 利用proxy拦截不符合要求的数据 |