设计模式面试题

设计模式

详解

设计模式

参考:

https://www.jianshu.com/p/fc4b2e679a1e

 

单例模式

整个应用中保证只有一个类的实例存在

参考:

https://mp.weixin.qq.com/s/dlVXW6aW4wLcLpey9NxPig

饿汉式单例类

 

懒汉式单例类

  1. instance = new SingletonClass(); 指令重排序 其它线程可能会获取一个空对象。解决方式 加 volatile

  2. 反射不安全 构造函数抛异常

  3. 序列化不安全 重写 readResolve()

工厂模式

解释:不向外部提供具体的创建对象的方法,只要传入一个名字参数就可以获取对象

  

目的:将对象的创建和使用分离,使得系统更加符合“单一职责原则”,有利于对功能的复用和系统的维护

 

 

(1)简单工厂模式是由一个具体的类去创建其他类的实例,父类是相同的,父类是具体的。 (一个工厂,生产多个产品

 

(2)工厂方法模式是有一个抽象的父类定义公共接口,子类负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中完成。 (product 中选择此种方式,一个抽象工厂,派生出多个具体工厂类,每个具体工厂类只能创建一个具体产品类的实例

 

(3)抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类。它针对的是有多个产品的等级结构。而工厂方法模式针对的是一个产品的等级结构。 (一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类可以创建多个具体产品类的实例。)

 

工厂方法模式:

责任链模式

定义一个处理者的抽象类,按需添对应的具体实现的子类,然后把所有子类的按执行顺序关联起来。

参考:https://www.jianshu.com/p/c845028dd835

 

优点:

1.降低耦合,把请求者与处理细节分离,便于扩展。
2.简化对象,使对象责任更清晰,便于维护。
3.增加对象指派职责的灵活性。

缺点:

当处理对象过多时,会影响执行性能

 

Chain:定义处理请求的方法 & 提供设置关联类的方法。
AChain:处理请求的具体实现。
BChain:处理请求的具体实现。
CChain:处理请求的具体实现。

代理模式

通过 【代理】这个中介,把 ”目标对象功能“ 与 ”访问者“ 分离

参考:

https://www.jianshu.com/p/0f8f644fcb5e

 

优点:

1.职责清晰。
2.高扩展。
3.保护真实对象的使用权限。

 

缺点:

实现代理模式需要额外的工作,有些代理模式的实现非常复杂

静态代理

装饰模式

含义:为一个现有对象添加额外的功能

 

解决:.在一个类在扩展功能时,如果通过继承的方式扩展,随着功能增加越来越多时,就会导致子类爆炸

参考:

https://www.jianshu.com/p/16e946f42ce1

优点:装饰模式比继承关系更灵活;装饰类和被装饰类可以独立发展,不会相互耦合;

缺点:多层装饰比较复杂

观察者模式

解决:一个对象状态改变给其他对象通知

优点:观察者模式可以实现表示层和数据逻辑层的分离;观察者和被观察者是抽象耦合的

缺点:通知过多观察者很耗时

策略模式

将算法或者行为封装成一个一个的类,任意地替换

优点:策略模式可以避免使用多重条件转移语句;可以灵活地增加新的算法或行为

缺点:客户端必须知道所有的策略类

适配器模式

参考:

https://blog.youkuaiyun.com/taoszu/article/details/82795233

一个类的接口转换成客户希望的另外一个接口。保留现有类所提供的服务,向客户提供接口,以满足客户的期望。

比如:一个蓝球队,教练通过一个交流接口和所有的球员进行交流,突然来了一个外援(教练不会外语),那现在既要保留原有的交流,又要能够和外国人交流,这时候就出现一个翻译(适配器角色),满足了需求。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值