死磕-设计模式(三)

简介: 死磕-设计模式(三)

一、你真的懂策略模式吗?

策略模式:

1、它定义了算法的家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。

2、例如:在上一篇的设计模式中,商场收银时如何促销,用打折还是返利,其实都是一些算法,用工厂来生成算法对象,这没有错。但是算法本身是一种策略,最重要的是这些算法是随时都可能互相替换的,这就是变化点,而封装变化点就是我们面向对象的一种很重要的思维方式。

二、策略模式的结构图和基本代码如下

1、Context:定义了上下文,用一个ConcreteStrategy来配置,维护一个对Strategy对象的引用。

2、ConcreateStrategyA,ConcreateStrategyB,ConcreateStrategyC三个类是具体的策略类,封装了具体的算法或者行为。继承于Strategy。

3、具体的代码如下:

三、基于设计模式二的代码用策略模式的实现如下:

1、改造的思路如下:

CashSuper:抽象策略类,CashNormal:正常收费类,CashRebate:打折收费类,CashReturn:返利收费类,CashContext:收费的上下文对象

代码结构图如下:


2、代码如下:

上下文代码如下:

客户端代码如下:

3、上面代码的缺点如下:

上面的代码还是在客户端来判断用哪一个算法了,代码臃肿。

所以解决方法把客户端代码拆开。采用策略模式+工厂模式的结合,下次分享。

今天先到这了~~

相关文章
|
4月前
|
设计模式 算法 前端开发
【面试题】什么是策略模式?用了策略模式之后,再也不用写那么多 if else 了,真香!
【面试题】什么是策略模式?用了策略模式之后,再也不用写那么多 if else 了,真香!
|
2天前
|
设计模式 算法 测试技术
死磕-设计模式(四)
死磕-设计模式(四)
|
2天前
|
设计模式 算法
死磕-设计模式(二)
死磕-设计模式(二)
|
2天前
|
设计模式 算法 程序员
死磕-设计模式(一)
死磕-设计模式(一)
|
设计模式 安全 调度
设计模式——单例模式(面试手撕顶呱呱)
设计模式——单例模式(面试手撕顶呱呱)
阿里面试官:使用策略模式+工厂模式干掉代码中过多的if-else
过多if-else项目背景 如果一开始就知道现在的业务需要,大部分人都不会在代码里添加过多的if-else判断的,烂代码基本都是刚开始写代码时并没有太多的需求,随着期需求不断的修改增加,开发时间也较的紧张,代码往往都是怎么快速怎么写。当然多写一个if-else比使用各种设计模式肯定来的更快速了,这也就导致项目代码慢慢变得臃肿,难以维护的主要原因。在有空闲时间的情况下就可以给以前的代码做一次手术了。先看本次未优化前的代码:
|
设计模式 前端开发
前端仔学学设计模式--单例模式
设计模式知识提取将分为N篇文章,本篇文章是个开篇文,后期会进行其他相关的同步(会就分享,不会就折腾),旨在提升技能,更好地享受敲键盘的快感~
前端仔学学设计模式--单例模式
|
设计模式 SQL 前端开发
面试官问,你在开发中有用过什么设计模式吗?我懵了
面试官问,你在开发中有用过什么设计模式吗?我懵了
285 0
面试官问,你在开发中有用过什么设计模式吗?我懵了
|
设计模式 缓存 Java
设计模式最佳套路3 —— 愉快地使用代理模式
代理模式(Proxy Pattern)即为某一个对象提供一个代理对象,由代理对象来接管被代理对象的各个方法的访问。
972 0
设计模式最佳套路3 —— 愉快地使用代理模式
|
设计模式 缓存 安全
死磕GOF23之单例模式
死磕GOF23之单例模式
139 0