牛客设计模式问题总结
牛客设计模式问题总结
1. 创建型模式
在软件工程中,创建型模式是处理对象创建的设计模式,试图根据实际情况使用合适的方式创建对象。基本的对象创建方式可能会导致设计上的问题,或增加设计的复杂度。创建型模式通过以某种方式控制对象的创建来解决问题。
2. 模式分类
结构型模式:
(1)代理(Proxy)模式:为某对象提供一种代理以控制对该对象的访问。即客户端通过代理间接地访问该对象,从而限制、增强或修改该对象的一些特性。
(2)适配器(Adapter)模式:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。(当已有类能满足目前的需求但和当前的系统兼容性比较差的情况)
(3) 桥接(Bridge)模式:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现的,从而降低了抽象和实现这两个可变维度的耦合度。
(4)装饰(Decorator)模式:动态地给对象增加一些职责,即增加其额外的功能。
(5)外观(Facade)模式:为多个复杂的子系统提供一个一致的接口,使这些子系统更加容易被访问。
(6)享元(Flyweight)模式:运用共享技术来有效地支持大量细粒度对象的复用。
(7)组合(Composite)模式:将对象组合成树状层次结构,使用户对单个对象和组合对象具有一致的访问性。
创建型模式:
(1)工厂方法()
(2)原型()
(3)抽象工厂()
(4)生成器()
(5)单例()
行为模式:
(1)责任链
(2)命令
(3)迭代器
(4)中介者
(5)备忘录
(6)观察则
(7)状态
(8)策略
(9)模板方法
(10)访问者
3. 单例模式
- 单例对于不频繁创建和销毁的对象只会增加系统开支,因为它一直存在,但是对于频繁创建和销毁的却可以在一定程度上减少开支
- 需要频繁创建的一些类,使用单例可以降低系统的内存压力,减少 GC
4. 原型模式
原型模式是一种创建型设计模式,Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节。
工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建
5. 外观模式
- 在外观模式中,一个子系统的外部与内部通信通过统一的外观对象进行。
- 在外观模式中,客户类只需要直接与外观对象进行交互。
- 外观模式是迪米特法则的一种具体实现。
单例模式的原则: 一个类有且只有一个职责。如果这个类需要变更,那么有且至于一个让其变化的原因。
迪米特法则:最小知识原则, 一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。
6. 设计模式一般用来解决什么样的问题?
同一问题的不同表相。
设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。是用来解决重复利用的解决方案,可以对之后的问题进行简单的修改、降低成本来进行使用,设计模式要为了使设计适应变化,并且要保持流畅、简单和持续性。
7. 设计模式的两大主题
系统复用与系统扩展
8. 策略模式
- Strategy角色负责决定实现策略所必须的接口
- ConcreteStrategy角色负责实现Strategy角色的接口,即负责实现具体的策略(战略、方向、方法和算法)