架构师训练营第三周总结
1.什么是设计模式
我们提到模式是指,在某种场景下针对某问题的某种解决方案。回到我们软件开发中的设计模式,就是在某个不断出现的问题场景中,解决这一类问题的通用解决方案。
每种设计模式都有名字,解决的问题,解决方案和相应的优缺点,便于开发者来识别不同的设计模式。在设计模式的约束下,我们更容易实现良好的架构设计,即满足开闭原则。
2.设计模式的分类
我们通常按照功能来划分设计模式的类目,一般会分为创建型,结构型和行为型。除了这种分类方式之外,还有一种通过模式所处理的是类还是对象来区分,分为类模式和对象模式。
3.常用的设计模式
3.1 创建型
3.1.1 Singleton(单例模式)
保证一个类仅有一个实例,并提供一个访问它的全局访问点。当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。
3.1.2 Factory(工厂模式)
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。当一个类不知道它所必须创建的对象的类的时候。当一个类希望由它的子类来指定它所创建的对象的时候。当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。
3.2.1 Decorator(装饰器模式)
动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator 模式相比生成子类更为灵活。 在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。
处理那些可以撤消的职责。当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。
3.2.2 Composite(组合模式)
将对象组合成树形结构以表示“部分-整体”的层次结构。Composite 使得用户对单个对象和组合对象的使用具有一致性。 你想表示对象的部分-整体层次结构。你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。
3.2.3 Adapter(适配器模式)
将一个类的接口转换成客户希望的另外一个接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
你想使用一个已经存在的类,而它的接口不符合你的需求。
你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。(仅适用于对象 Adapter )你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。
3.3 行为型
3.3.1 Template Method(模板方法模式)
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。
评论