![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 67
快乐程序员_666
爱编程!爱生活!
展开
-
设计模式——策略模式
在简单工厂模式里有一些瑕疵,虽然PHP不需要重新编译但小张之后每次新加一个支付方式都要告知负责人去修改PayFactory。实例化对象的逻辑全部封装在一个工厂类里,每次需求变化都要单独修改工厂类(违反了开闭原则),而且出了异常可能所有相关功能类都正常工作。 我们可以用工厂模式来解决简单工厂,首先申明设计模式不是算法,它只有适合与不适合,没有性能优劣之分。我们今天还可用策略模式来解决。 策略模式:是对象的行为模式,用意是对一组算法的封装。动态的选择需要的算法并使用。以下是具体实现步骤: 此时负责人制原创 2021-10-28 15:37:36 · 102 阅读 · 0 评论 -
设计模式——观察者
当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。 我们在用美团App时经常出现用户登录时会弹出一个框告诉用户获得了一张优惠券,金额和使用规则会根据用户距离上次的登录时间和消费习惯来定。当我们经常使用时获得优惠券的概率就会少,优惠金额也会少。软件设计里把登录做为一个被观察的类(主题),把送优惠券做为一个观察类。当用户登录时通知送优惠券,为用增加一个优惠券。可以多个观察者,比如用户登录后会根据其消费习原创 2021-01-07 19:22:03 · 192 阅读 · 0 评论 -
设计模式——单例模式
单例模式:作为对象的创建模式,它提供了一种创建对象的最佳方式。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局地提供这个实例。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。 主要应用场合:线程池、缓存、日志对象、对话框、打印机、数据库操作、显卡的驱动程序常被设计成单例。使用单例模式可以避免大量的new操作。因为每一次new操作都会消耗系统和内存的资源。 例如下面代码: class UserModel { public function __construct原创 2021-01-05 00:17:45 · 186 阅读 · 0 评论 -
设计模式——抽象工厂
之前我们说过简单工厂模式和工厂模式。都是针对单一支付类来写。但在开发过程我们常会做一个促销活动,而且有些促销是针对支付方式的。比如公司和招商银行签订了战略合作,招商银行会给我们引流,公司给用招商银行支付的用户赠送礼品、优惠券或直接打折。这样就会用两个维度:支付方式和促销。那这又如何处理呢? 现在我们通过这个例子来讲解抽象工厂模式: 首先、需要一个支付抽象类Payment,在这个基础上可以扩展支付宝支付、微信支付、招商银行支付等。 其次、需要一个促销类型的抽象类Promotion, 在这个基础上可以扩展原创 2020-12-31 01:12:45 · 377 阅读 · 1 评论 -
设计模式——工厂模式
从上一篇文章中发现简单工厂模式里有一些瑕疵,虽然PHP不需要重新编译但小张之后每次新加一个支付方式都要告知负责人去修改PayFactory。实例化对象的逻辑全部封装在一个工厂类里,每次需求变化都要单独修改工厂类(违反了开闭原则),而且出了异常可能所有相关功能类都正常工作。 简单解释一下开闭原则:开闭原则规定“软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的”,这意味着一个实体是允许在不改变它的源代码的前提下变更它的行为。该特性在产品化的环境中是特别有价值的,在这种环境中,改变源原创 2020-12-29 00:06:36 · 239 阅读 · 0 评论 -
设计模式——简单工厂
设计模式之简单工厂 设计模式(英语 design pattern)是对面向对象设计中反复出现的问题的解决方案。就像下象棋时红方走中心炮,黑方就跳一个马来保护中兵一样。所以不要认为他有多深奥。之后会用一样简单的例子来一一讲解常见的几种设计模式。 今天主要分析简单工厂模式。比如要实现一个在线支付功能(主要是支付宝支付和微信支付),如果之后还会有paypal、京东等。因为每种线上支付都自己的文档,对接起来会花费一定的时间,由于时间紧所以一人负责一个支付方式开发。小张开发支付宝,小李开发微信。小王开发结算逻辑原创 2020-12-28 00:12:09 · 201 阅读 · 0 评论