写点什么

浅析常用设计模式及应用场景

用户头像
kk
关注
发布于: 2020 年 06 月 24 日

优秀的软件在实现过程中有两个特征:一个是代码的可复用性高、一个是可扩展性好。合理的使用设计模式是实现这两个特征的关键。

目前为人所熟知的设计模式有23种,根据面向的问题域可以划分为创建型模式结构型模式行为模式

创建型模式

工厂方法

在父类中提供一个创建对象的接口,以允许子类根据具体的需要创建对象。

应用场景:

1、当你在编码过程中,无法预知要使用的对象的确切类别时

设计原则:

1、单一职责(工厂类负责所有对象的创建)

2、开闭原则(在增加新的类型时,客户端无需修改代码)

单例模式

保证一个类只有一个实例,并提供一个全局的访问方式。

应用场景:

1、当你需要保证一个类只有一个实例时。比如:控制某个共享资源的访问权限。

2、当你需要提供一个全局访问某个实例的方式,同时又要保护该实例不会被复写时。

结构型模式

适配器

使接口不兼容的对象能够相互合作。

两种实现:

1、对象适配器:适配器实现其中一个对象的接口, 并组合封装另一个对象。

2、类适配器:适配器通过继承或实现两个对象的接口

应用场景:

1、当你希望使用某个类,但是它的接口与其他代码不兼容时。

组合模式

可以将对象组合成树状结构,并且能像使用独立对象一样使用它们。

应用场景:

1、当你需要实现树状对象结构时。

2、当你希望客户端代码以相同方式处理简单和复杂元素时。

装饰模式

通过将对象放入包含行为的特殊封装对象中来为原对象绑定新的行为。

应用场景:

1、当你希望在无需修改代码的情况下,就可以为对象新增额外的行为时

2、当通过继承的方式扩展对象行为的方案难以实现或不可行时

代理模式

代理控制着对于原对象的访问,并允许在将请求提交给对象前后进行一些处理。

应用场景:

1、当你有一个偶尔使用的重量级对象,并想要延迟初始化它时。

2、当你想要在客户端访问对象时,对客户端的访问进行权限控制时。

3、当你想要记录客户端的访问日志时。

行为模式

观察者模式

允许你定义一种订阅机制,可在对象事件发生时通知多个“观察”该对象的其他对象。

应用场景:

1、当一个对象状态的改变需要引起其他对象的改变时

策略模式

能让你定义一系列算法,并将每种算法分别放入独立的类中,以使算法的对象能够相互替换。

应用场景:

1、当你有许多仅在执行某些行为时略有不同的相似类时。

2、当你想要将类的业务逻辑与其算法实现细节隔离开来时。

模版方法模式

通过在超类中定义了一个算法的框架,允许子类在不修改结构的情况下重写算法的特定步骤。

应用场景:

1、当你控制整个算法的执行流程,同时只希望客户端扩展某个特定算法步骤时。

2、当多个类的算法除一些细微不同之外几乎完全一样时。



用户头像

kk

关注

还未添加个人签名 2018.04.25 加入

还未添加个人简介

评论

发布
暂无评论
浅析常用设计模式及应用场景