面试准备-设计模式-待更新

参考:

  1. 《程序员面试笔试宝典》(何昊、叶向阳)

23种经典设计模式

创建型 结构型 行为型
Factory Method(工厂方法) Adapter_Class(适配器类) Interpreter(解释器)、Template Method(模板方法)
对象 Abstract Factory(抽象工厂)、Builder(生成器)、Prototype(原型)、Singleton(单例) Adapter_Object(适配器对象)、Bridge(桥接)、Composite(组合)、Decorator(装饰) 、Facade(外观)、 Flyweight(享元)、 Proxy(代理) Chain of Responsibility(职责链)、Command(命令)、Iterator(迭代器)、Meditator(中介者)、Memento(备忘录)、Observer(观察者)、State(状态)、Strategy(策略)、Visitor(访问者模式)

单例模式

即每个类只有一个实例。比如一个电脑可以连接多台打印机,但是打印程序只能有一个,因为这样才能避免两个打印作业同时输出到打印机中。

全局变量和单例模式的区别?

全局变量是对一个对象的静态引用,但不能保证应用程序中只有一个实例,而且也违反编码规范(要少用全局变量),同时,全局变量不能实现继承。单例模式保证了唯一实例,也提供了访问该唯一实例的全局访问点,此外,单例类的构造函数必须是私有的。

工厂模式

工厂模式专门负责实例化有大量公共接口的类。工厂模式可以动态地决定将哪个类实例化。客户类和工厂类是分开的,消费者需要某种产品时,只要向工厂提出请求,消费者无需修改即接纳新产品。缺点是当产品修改时,工厂类也需要修改。

工厂模式包括3种形态:

1)简单工厂Simple Factory

工厂类根据提供给其的参数,从几个可能的产品中挑一个类的实例返回。通常这几个可能的产品都有一个公共的父类和公共的方法。

2)工厂方法 Factory Method

先定义一个用于创建产品对象的工厂的接口,实际创建工作推迟到工厂接口的子类中。它是简单工厂模式的进一步抽象和推广。多态的使用,使得工厂方法模式保持了简单工厂的优点,又克服了缺点。

3)抽象工厂Abstract Factory

工厂可以向客户提供一个接口,使客户在不指定产品的情况下,创建多个产品族中的产品对象。工厂类负责创建抽象产品的具体子类的实例。

抽象工厂模式(通俗易懂)_什么是抽象工厂模式-CSDN博客

是围绕一个超级工厂创建其他工厂。产品族是一个品牌下面的所有产品(比如小米会生产手机、手表,就称为小米的产品族);产品等级是多个品牌下面的同种产品(比如华为的手机和小米的手机就称为一个产品等级)。

优点:能将一个产品族的产品一起创建,同族产品协作简单;扩展产品等级非常简单(比如新增一个品牌),只需要增加一个工厂类,再增加产品的实现类即可,符合OCP原则。
注:OCP:Open-Closed Principle,开放-封闭原则,即一个软件应该对扩展开放,对修改关闭。

缺点:很难扩展产品族(如增加一个品牌的新产品),既要修改工厂抽象类的代码,又要增加产品的实现类代码;增加了系统的抽象性和理解难度。

适配器模式

也称为变压器模式。它是将一个类的接口转换成客户端所期望的另一种接口。适配类可以根据参数返回一个适合的实例。主要应用于:希望复用现存类,但接口与复用环境不一致;因此在遗留代码复用、类库迁移等方面非常有用。包括两种实现结构:

1)类适配器:多继承,不推荐使用

2)对象适配器:对象组合,耦合度低

享元模式

享元模式 | 菜鸟教程 (runoob.com)

运用共享技术有效地支持大量细粒度对象(相似的)。**主要解决:**在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。

需要区分内部状态和外部状态。内部状态存储在享元内部,不会随环境改变,外部则不同,同时不受内部状态变化影响。将可以共享的状态和不可以共享的从常规类中区别开来,不可以共享的剔除出去。客户端不能直接创建被共享的对象,要使用工厂对象来创建。

使用场景: 1、系统有大量相似对象。 2、需要缓冲池的场景。(例如Java中的String,如果有则返回否则创建一个字符串保存在缓存池中;数据库连接池)

观察者模式

也称为发布/订阅者模式。它定义的是一对多的依赖关系,当一个对象的状态发生改变时,其所有依赖者都会收到通知并自动更新。比如java和c#的事件处理机制。

优点: 1、观察者和被观察者是抽象耦合的。 2、建立一套触发机制。

缺点: 1、如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。 2、如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃。 3、观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。

你可能感兴趣的:(面试准备,面试,设计模式,职场和发展)