在javascript中,不同的设计模式到底应对什么场景?
最近再看javascript高级设计模式,里面的模式很多,少说十几种吧。
但是目前感觉下来,
单例+工厂可以写出所有的需求,其他设计模式出场的机会似乎很少。
书里面举得一些运用设计模式的场景都很抽象,看了例子之后就像之前说的,用单例+工厂也可以解决。
很难理解什么场景用什么模式,现在就像填鸭一样把很多模式塞进脑子里,效率很低!
有没有什么文章简要的写出各种设计模式都有什么特点,适合什么场景呀?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
设计模式解决的问题从来就不是“能不能完成需求”,而是如何更好的完成需求。
你说单例+工厂可以写出所有的需求,那我还能说,你甚至直接用面向过程来编程,照样能解决所有问题。
理论上来说只要计算机语言是图灵完备的,那么所有的可计算性问题都可以用这个编程语言来解决,这和是什么设计模式是没有关系的。
不理解设计模式的应用场景是很正常的,我也没办法给你举例子,因为这东西都是在代码规模到了一定程度之后才会觉得好用的。就比如前端方面,写过工程化复杂页面的前端的同学肯定深有体会,现代化的Vue和React这些框架用起来实在是爽快,但是对于外行或者是新人来说,这些破玩意儿除了把前端搞得复杂无比之外有什么意义?
我也只能建议你,最好是把这些设计模式记在脑子里,不要因为不理解它就放弃,等到你写代码到了某种程度的时候,突然灵光一闪,“以前在某某书上看到过某种设计模式,好像用在这里很合适啊”,这样你就算是入门了。
设计模式分类(创建型模式、结构型模式、行为模式),这是重点,一开始我也不明白设计模式,从头看到尾,直到有点有个高人指点,我才发现这3个玩意,他们又对应不同的设计模式。
创建型模式
社会化的分工越来越细,自然在软件设计方面也是如此,因此对象的创建和对象的使用分开也就成为了必然趋势。因为对象的创建会消耗掉系统的很多资源,所以单独对对象的创建进行研究,从而能够高效地创建对象就是创建型模式要探讨的问题。这里有6个具体的创建型模式可供研究,它们分别是:
简单工厂模式(Simple Factory)
工厂方法模式(Factory Method)
抽象工厂模式(Abstract Factory)
创建者模式(Builder)
原型模式(Prototype)
单例模式(Singleton)
结构型模式
在解决了对象的创建问题之后,对象的组成以及对象之间的依赖关系就成了开发人员关注的焦点,因为如何设计对象的结构、继承和依赖关系会影响到后续程序的维护性、代码的健壮性、耦合性等。对象结构的设计很容易体现出设计人员水平的高低,这里有7个具体的结构型模式可供研究,它们分别是:
外观模式/门面模式(Facade门面模式)
适配器模式(Adapter)
代理模式(Proxy)
装饰模式(Decorator)
桥梁模式/桥接模式(Bridge)
组合模式(Composite)
享元模式(Flyweight)
行为型模式
在对象的结构和对象的创建问题都解决了之后,就剩下对象的行为问题了,如果对象的行为设计的好,那么对象的行为就会更清晰,它们之间的协作效率就会提高,这里有11个具体的行为型模式可供研究,它们分别是:
模板方法模式(Template Method)
观察者模式(Observer)
状态模式(State)
策略模式(Strategy)
职责链模式(Chain of Responsibility)
命令模式(Command)
访问者模式(Visitor)
调停者模式(Mediator)
备忘录模式(Memento)
迭代器模式(Iterator)
解释器模式(Interpreter)
举个栗子
比如观察者模式 又叫发布订阅者模式,前端很常用的模式,自定义事件,数据监听。mvvm框架里面都有这个玩意。组件之间数据交互,都会用到这个东西。