前端设计模式及其用途
什么是设计模式
设计模式是开发人员在开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。
项目中合理地运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被广泛应用的原因。
设计模式可分为以下几类类
1.创建型模式:
工厂模式(Factory Pattern)
抽象工厂模式(Abstract Factory Pattern)
单例模式(Singleton Pattern)
建造者模式(Builder Pattern)
原型模式(Prototype Pattern)
2.结构型模式:
适配器模式(Adapter Pattern)
桥接模式(Bridge Pattern)
过滤器模式(Filter、Criteria Pattern)
组合模式(Composite Pattern)
装饰器模式(Decorator Pattern)
外观模式(Facade Pattern)
享元模式(Flyweight Pattern)
代理模式(Proxy Pattern)
3.行为型模式 :
责任链模式(Chain of Responsibility Pattern)
命令模式(Command Pattern)
解释器模式(Interpreter Pattern)
迭代器模式(Iterator Pattern)
中介者模式(Mediator Pattern)
备忘录模式(Memento Pattern)
观察者模式(Observer Pattern)
状态模式(State Pattern)
空对象模式(Null Object Pattern)
策略模式(Strategy Pattern)
模板模式(Template Pattern)
访问者模式(Visitor Pattern)
4.J2EE 模式
MVC 模式(MVC Pattern)
业务代表模式(Business Delegate Pattern)
组合实体模式(Composite Entity Pattern)
数据访问对象模式(Data Access Object Pattern)
前端控制器模式(Front Controller Pattern)
拦截过滤器模式(Intercepting Filter Pattern)
服务定位器模式(Service Locator Pattern)
传输对象模式(Transfer Object Pattern)
前端常用的设计模式
1.用于代码封装的设计模式主要有工厂模式,创建者模式,单例模式,原型模式四种
1.当需要使用大量实例的实现的时候可以考虑是否使用工厂模式
2.当全局只能有一个实例的时候可以考虑使用单列模式
3. 当内部逻辑较复杂,外部使用时需要的实例也不多,可以考虑用建造者模式来封装。
4.当新老对象之间可能有继承关系的可以考虑用原型模式来封装
2.提高复用性的设计模式主要有桥接模式,享元模式,模板方法模式
1.当这些重复代码有一部分操作是一样的,但是每次操作的对象不一样,我们可以考虑用享元模式将公有操作提取成方法,将私有部分作为参数传进去
2.当这些重复代码有一些基本操作是一样的,但是具体应用时需要的功能更多,我们可以考虑将这些基本操作提取成模板,然后在模板上留出扩展接口,需要的地方可以通过这些接口来扩展功能,有点类似于继承,但实现方式并不仅限于继承。
3.我们将重复部分提取出来,其他地方也可以用,其实就是提高了代码的复用性。
3.提高扩展性的设计模式主要有职责链模式,观察者模式,适配器模式,装饰器模式。
1.职责链模式和观察者模式主要是用来降低模块间耦合的,耦合低了就可以很方便的对他们进行组织,给他们扩展功能,适配器模式和装饰器模式主要是用来在不影响原有代码的基础上进行扩展的。
2. 对于旧代码改造或者新模块引入,我们可能面临接口不通用的情况,这时候我们可以考虑写一个适配器来适配他们。适配器模式同样适用于参数适配的情况。
4.提高代码质量为目的设计模式主要有策略/状态模式,外观模式,迭代器模式,备忘录模式
1.策略模式通过将我们的if条件改写为一条条的策略减少了if…else的数量,看起来更清爽,扩展起来也更方便。状态模式跟策略模式很像,只是还多了一个状态,可以根据这个状态来选取具体的策略。
2.外观模式可能我们已经在无意间使用了,就是将模块一些内部逻辑封装在一个更高级的接口内部,或者将一些类似操作封装在一个方法内部,从而让外部调用更加方便。
3.备忘录模式就是加一个缓存对象,用来记录之前获取过的数据或者操作的状态,后面可以用来加快访问速度或者进行状态回滚。