死磕-设计模式(三)

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

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

策略模式:

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

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

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

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

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

3、具体的代码如下:

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

1、改造的思路如下:

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

代码结构图如下:


2、代码如下:

上下文代码如下:

客户端代码如下:

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

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

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

今天先到这了~~

相关文章
|
3月前
|
设计模式 算法
死磕-设计模式(二)
死磕-设计模式(二)
|
3月前
|
设计模式 算法 测试技术
死磕-设计模式(四)
死磕-设计模式(四)
|
3月前
|
设计模式 算法 程序员
死磕-设计模式(一)
死磕-设计模式(一)
|
7月前
|
设计模式 Java 开发者
一目了然!谁能想到Java多线程设计模式竟然被图解,看完不服不行
多线程设计模式在Java编程中起着至关重要的作用,它能够有效提高程序的执行效率,使得程序在处理大量数据和复杂任务时更加高效。然而,对于初学者来说,理解和应用多线程设计模式可能是一项相当具有挑战性的任务。为了让读者更加轻松地掌握这一复杂主题,我们带着一种全新的图解方式,深入剖析Java多线程设计模式的精髓。
|
设计模式 消息中间件 算法
面试题(二十五)设计模式
1. 设计模式 1.1 说一说设计模式的六大原则 参考答案 单一职责原则 一个类,应当只有一个引起它变化的原因;即一个类应该只有一个职责。 就一个类而言,应该只专注于做一件事和仅有一个引起变化的原因,这就是所谓的单一职责原则。该原则提出了对对象职责的一种理想期望,对象不应该承担太多职责,正如人不应该一心分为二用。唯有专注,才能保证对象的高内聚;唯有单一,才能保证对象的细粒度。对象的高内聚与细粒度有利于对象的重用。一个庞大的对象承担了太多的职责,当客户端需要该对象的某一个职责时,就不得不将所有的职责都包含进来,从而造成冗余代码。 里氏替换原则 在面向对象的语言中,继承是必不可少的、优秀的语言机制
104 0
阿里面试官:使用策略模式+工厂模式干掉代码中过多的if-else
过多if-else项目背景 如果一开始就知道现在的业务需要,大部分人都不会在代码里添加过多的if-else判断的,烂代码基本都是刚开始写代码时并没有太多的需求,随着期需求不断的修改增加,开发时间也较的紧张,代码往往都是怎么快速怎么写。当然多写一个if-else比使用各种设计模式肯定来的更快速了,这也就导致项目代码慢慢变得臃肿,难以维护的主要原因。在有空闲时间的情况下就可以给以前的代码做一次手术了。先看本次未优化前的代码:
|
设计模式 算法 前端开发
好记性不如烂笔头——设计模式
好记性不如烂笔头——设计模式
好记性不如烂笔头——设计模式
|
设计模式 关系型数据库 MySQL
平时代码中用不到设计模式?Are you kidding me?
引子 平时我是个反应非常慢的人。有多慢呢?大概是两年前有次团队内部开会时,我听到同学说平时代码中用不到设计模式,我当时没有回答。两年后我终于反应过来了:“Are you kidding me?我每天都在用!”
平时代码中用不到设计模式?Are you kidding me?
|
设计模式 前端开发
前端仔学学设计模式--单例模式
设计模式知识提取将分为N篇文章,本篇文章是个开篇文,后期会进行其他相关的同步(会就分享,不会就折腾),旨在提升技能,更好地享受敲键盘的快感~
前端仔学学设计模式--单例模式
|
设计模式 SQL 前端开发
面试官问,你在开发中有用过什么设计模式吗?我懵了
面试官问,你在开发中有用过什么设计模式吗?我懵了
304 0
面试官问,你在开发中有用过什么设计模式吗?我懵了