死磕-设计模式(三)

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

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

策略模式:

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

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

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

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

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

3、具体的代码如下:

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

1、改造的思路如下:

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

代码结构图如下:


2、代码如下:

上下文代码如下:

客户端代码如下:

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

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

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

今天先到这了~~

相关文章
|
2月前
|
设计模式 算法 测试技术
死磕-设计模式(四)
死磕-设计模式(四)
|
2月前
|
设计模式 算法
死磕-设计模式(二)
死磕-设计模式(二)
|
2月前
|
设计模式 算法 程序员
死磕-设计模式(一)
死磕-设计模式(一)
|
6月前
|
设计模式 Java 开发者
一目了然!谁能想到Java多线程设计模式竟然被图解,看完不服不行
多线程设计模式在Java编程中起着至关重要的作用,它能够有效提高程序的执行效率,使得程序在处理大量数据和复杂任务时更加高效。然而,对于初学者来说,理解和应用多线程设计模式可能是一项相当具有挑战性的任务。为了让读者更加轻松地掌握这一复杂主题,我们带着一种全新的图解方式,深入剖析Java多线程设计模式的精髓。
|
设计模式 安全 调度
设计模式——单例模式(面试手撕顶呱呱)
设计模式——单例模式(面试手撕顶呱呱)
阿里面试官:使用策略模式+工厂模式干掉代码中过多的if-else
过多if-else项目背景 如果一开始就知道现在的业务需要,大部分人都不会在代码里添加过多的if-else判断的,烂代码基本都是刚开始写代码时并没有太多的需求,随着期需求不断的修改增加,开发时间也较的紧张,代码往往都是怎么快速怎么写。当然多写一个if-else比使用各种设计模式肯定来的更快速了,这也就导致项目代码慢慢变得臃肿,难以维护的主要原因。在有空闲时间的情况下就可以给以前的代码做一次手术了。先看本次未优化前的代码:
|
设计模式 前端开发
前端仔学学设计模式--单例模式
设计模式知识提取将分为N篇文章,本篇文章是个开篇文,后期会进行其他相关的同步(会就分享,不会就折腾),旨在提升技能,更好地享受敲键盘的快感~
前端仔学学设计模式--单例模式
|
设计模式 SQL 前端开发
面试官问,你在开发中有用过什么设计模式吗?我懵了
面试官问,你在开发中有用过什么设计模式吗?我懵了
292 0
面试官问,你在开发中有用过什么设计模式吗?我懵了
|
设计模式 缓存 Java
设计模式最佳套路3 —— 愉快地使用代理模式
代理模式(Proxy Pattern)即为某一个对象提供一个代理对象,由代理对象来接管被代理对象的各个方法的访问。
977 0
设计模式最佳套路3 —— 愉快地使用代理模式
|
新零售 设计模式 Java
设计模式最佳套路4 —— 愉快地使用模板模式
模板模式(Template Pattern) 又叫模板方法模式,其定义了操作的流程,并将流程中的某些步骤延迟到子类中进行实现,使得子类在不改变操作流程的前提下,即可重新定义该操作的某些特定步骤。例如做菜,操作流程一般为 “准备菜”->“放油”->“炒菜”->“调味”->“装盘”,但可能对于不同的菜要放不同类型的油,不同的菜调味方式也可能不一样。
设计模式最佳套路4 —— 愉快地使用模板模式