几种常见的设计模式

工厂模式

工厂模式提供了一种创建的方式,它又可以分为简单工厂模式、工厂方法模式和抽象工厂模式。一般工厂模式提供抽象的接口,然后会产生多个抽象接口的实现类。

简单工厂模式

简单工厂模式又叫静态方法模式,因为工厂类中定义一个静态方法用于创建对象。简单工厂让使用者可以直接消费产品而不需要知道产品的具体产生细节。
在客户需要一个产品时, 会联系工厂来制作出一个产品,然后客户可以直接使用这个产品。

特点: 优点 : 客户类和工厂类分离, 当客户需要产品时,只需要像工厂请求,当有新产品的需求时,客户不需要做出改变。
缺点: 当产品跟新迭代时, 工厂类也需要修改制作。

工厂方法模式

工厂方法模式,也叫多态工厂模式。 在工厂方法模式中,工厂父类定义创建产品对象的公共接口,而工厂子类则负责生产具体的产品对象。
特点: 在面对新产品时,无需修改抽象工厂的接口,只需要添加一个具体的产品工厂。这样系统的可扩展性会变得很好。
缺点: 一个具体工厂只能创建一种具体产品。 类多,导致系统复杂度较高。

抽象工厂模式

在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法。但是有时候我们需要一个工厂可以提供多个产品对象,而不是单一的产品对象。
特点: 抽象工厂模式隔离了具体类的生成,使得酷虎并不需要知道什么被创建。因此只需要改变具体工厂的实例,就可以改变对应产品系统。
缺点:当要支持新种类的产品就以为着需要扩展抽象工厂类的接口。

单例模式

单例模式可以满足我们一些对象在全局中只需要一个的需求。 它可以保证一个类仅有一个实例,并提供一个访问这个实例的静态接口GetInstance()。 单例模式又分为懒汉模式和饿汉模式。

懒汉模式

懒汉模式只得是在程序一开始执行时并不创建对象,当有需要时才会创建这个唯一实例。值得注意得是,在创建唯一实例时,为了保证线程安全和同时兼顾效率问题,需要采用双重检测。所以一般在类中会保存的是一个对象指针。
特点: 那程序的启动会更快,不会立刻占用内存。

饿汉模式

饿汉模式,故名思意, 及在程序运行时立刻产生唯一的实例对象。
所以饿汉模式的优点就是简单,非常简单,但是相对的,如果当一个项目中包含很多单例模式时,饿汉模式会使项目的启动变慢。

适配器模式

将一个类的接口转换成另一组接口,使得原本因为接口不兼容而不适合工作的情况变得好起来,最常见的像我们用两个队列实现一个栈, 或者两个栈实现一个队列。在STL库中,队列和栈也是通过适配器将双端队列封装出来的。
适配器模式分为类结构性模式和类对象型模式两种,前者类之间的耦合度会更高。

优点:

  • 上层通过适配器可以调用下层目标接口;
  • 对现有的类进行复用,不需要修改原本的代码;
  • 对目标类和适配器类解耦,同时也能统一目标类和适配器类的接口;
    缺点:
  • 需要额外结合具体的业务场景;
  • 增加代码的阅读难度;降低代码的可读性。

观察者模式

当多个对象之间存在一对多的依赖关系时,当一个对象的状态发生改变时,所有依赖与它的对象都得到通知并自动更新, 这个过程就像发布-订阅模式。这是一个对象行为型模式。

观察者模式的主要角色:

  1. 抽象主题角色, 这充当抽象目标类。它提供一个用于保存观察则对象的聚集类,和增减观察者对象的方法。以及通知所有观察者的抽象方法。
  2. 具体主题角色,时一个抽象角色的具体化,当具体主题的内部状态发生改变时,通知所有注册过的观察者对象。
  3. 抽象观察者角色,他是一个抽象类或者接口,包含了一个更新自己的抽象方法,在接到具体主题更改通知时被调用。
  4. 具体观察者角色,是一个抽象观察者的具体化,实现抽象观察者定义的抽象方法,以便在得到目标的更改通知时更新自身的状态。

优点:

  • 减低了目标和观察者之间的耦合关系,两者之间时抽象耦合关系。符合依赖倒置原则。
  • 目标与观察者之间简历了一套触发机制。

缺点:

  • 目标和观察者之间可能出现循环引用的问题;
  • 当观察者对象很多事,通知的发布会花费很多时间,影响效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值