为什么要学习设计模式?
在许多访谈中,你可能会遇到很多面向对象编程中的接口,抽象类,代理和以及其他与设计模式相关的问题。 一旦了解了设计模式,它会让你轻松应对任何访谈,并可以在你的项目中应用这些特性。在应用程序中实现设计模式已经得到验证和测试。
为了使应用程序具有可扩展性,可靠性和易维护性,应该编写符合设计模式的代码。
什么是设计模式。
设计模式是我们每天编程遇到的问题的可重用解决方案。
设计模式主要是为了解决对象的生成和整合问题。
换句话说,设计模式可以作为可应用于现实世界编程问题的模板。
设计模式的发展历史
设计模式的概念是由四人帮(《设计模式(可复用面向对象软件的基础)》的四位作者)提出。
四人帮把这本书分成两部分:
第一部分解释面向对象编程的优缺点。
第二部分是关于 23 个经典设计模式的演变。
自提出设计模式概念后,四人帮设计模式在软件开发生命周期中发挥了重要作用。
设计模式分类
根据实际应用中遇到的不同问题,四人帮将设计模式分为三种类型。
创建型模式
结构型模式
行为型模式
接下来将概述属于这三种类型的 23 种设计模式的主要概念。
创建型模式
这类模式用于对象的生成和生命周期的管理。
创造模式可以决定生成哪些对象,提高了程序的灵活性。模式如下:
抽象工厂模式
生成器模式
工厂方法模式
单例模式
原型模式
JavaScript 抽象工厂模式
抽象工厂模式究竟是什么?
它就像一个工厂,但一切都被封装起来:
提供对象的方法
构建对象的工厂
最终的对象
最终对象包含使用策略模式的对象
策略模式只是使用组合的方式,换句话说,它的类字段实际上是对象本身。
抽象工厂的用处?
抽象工厂模式可以创建类簇类的对象,而不需要指定具体的类,这使得抽象工厂很灵活。
通过抽象工厂模式可以对任何类簇对象进行建模并通过统一的接口供外部对象使用。
抽象工厂唯一不好的地方是它可能变得非常复杂。
JavaScript 的生成器模式(Builder 模式)
Builder 模式是什么?
Builder 模式是一种用于创建由其他对象组合构成的对象的模式。创建部件的方法应该独立于主对象。另外,为了从业务方隐藏部件的创建细节,两者是相互独立的。
在使用生成器模式时,生成器知道所有的细节,且创建细节完全对其他相关类屏蔽。
JavaScript 工厂方法模式
什么是工厂方法模式?
根据定义,只要想一个方法返回公共超类的几个可能的类中的一个,就可以使用工厂模式。
假设我想随机向屏幕上射击敌人。那么如果所有东西都硬编码好了,并且不知道敌人的具体类型会让处理变得很困难。
但是,假设我创建了一个随机数生成器,每个可能的敌人类都由一个数字代替,并可以由该随机数生成器返回。
然后可以将这个数字发送给工厂对象,这样可以返回一个动态创建的敌人。
所以,MOL 的主要概念非常重要,我们希望能够在运行时选择类,这就是工厂模式能够提供的。
何时使用工厂方法模式?
当不知道需要何种类型的对象时可以使用工厂方法模式。
但是,有一点需要注意,确保所有潜在的类都具有相同的子类层次结构,这意味着在继承路径上有相同的父类。
可以使用工厂模式来集中类别选择的代码。或是不希望用户知道每一个可能的子类时。
JavaScript 单例模式
什么是单例模式?
当想要避免实例化多个对象时使用单例模式。单例使得只能从类实例化一个对象。
现在你可能会问自己,我什么时候会想要这样做? 其实,有很多场景。
我们已经演示过拼字游戏里使用一个类容纳所有可能的字母,并且拼字游戏是一款非常常见的棋盘游戏,这里使用单例模式是很明智的选择。
这个单例类包含所有可能的拼字游戏字母,以便玩家可以使用这个单例类取得所有字母,不同玩家可以同时请求获取。
单例使得每个玩家都共享相同的字母列表,每个玩家可以根据这个字母列表来拼接自己的单词。
JavaScript 原型模式
什么是原型模式?
当想要通过克隆或拷贝对象来生成对象时,这就是原型模式。
通过原型模式可以在运行时添加已知父类的子类实例。
当有许多类只在运行时需要使用时可以使用原型模式。原型模式的好处之一是减少了创建多个子类。
结构型模式
这类模式描述了向现有对象添加功能的不同方式简单地说,这个模式着重于解耦对象的接口实现模式如下:
适配器模式
桥接模式
组合模式
装饰者模式
外观模式
享元模式
代理模式
JavaScript 适配器设计模式
适配器模式的作用
适配器设计模式允许使用两个完全不兼容的接口一起工作,正如其名字一样,适配不同接口。
假设你墙上的插座只有两座插头,但是你想连接一个三座的插头,这时就需要适配器了。
当客户期望使用目标接口是两座插头,但是你只有三座插头,这就是适配器将要执行的操作 把三座转换成两座。
适配器模式允许使用任何现有接口适配为目标接口。
从另一个角度看任何类都可以协同工作只要适配器解决了所有类都必须实现相同接口的问题。
JavaScript 桥接模式
什么是桥接模式?
官方定义是将抽象与其实现分离开来,因此两者可以独立变化。
文章评论 本文章有个评论