死磕-设计模式(二)

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

一、商场营销-策略模式

背景:如何去实现一个商场的收银软件,营业员根据客户所购买商品的单价和数量,向客户收费。

初步分析:用两个文本框来输入单价和数量,一个确定按钮来算出每种商品的费用,用个列表框来记录商品的清单,一个标签来记录总计,还需要一个重置的按钮来重新开始。

二、商场收银系统v1.0的代码如下:

三、需求改变

1、如果现在要求商场对商品搞活动,所有的商品要打八折。

A、然后有人会想那不就是在上面的totalPrices后面乘以一个0.8吗?

但是仔细想一想,难道商场活动结束,不打折了,你还要再改一遍程序代码,然后再用改后的程序去把所有机器全部安装一次吗?再说了,以后还可能有周年庆,打五折的时候,该怎么办?

所以说改这个需求的应该加一个下拉选择框就可以解决你说的问题

2、修改的代码如下:

四、新的需求

1、在上面的代码中,4个分支的代码中除了打折多少以外几乎没有什么不同,应该考虑重构一下,不过这个不是主要的。

2、但是现在的新的需求是如果商场的活动加大,需要有满300返100的促销算法,你说怎么办呢?

3、这时,如果有人看我写的第一篇设计模式的话,就会有人想到用简单工厂的设计模式,但是随着类越来越多的话,这时要几个活动就会写几个活动的类。

4、这时应该看哪些是相同的,哪些是不同的。

思考:这里的打折基本是一样的,只要有个初始化参数就可以了,满几送几,需要两个参数就可以了。

面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类。

五、代码实现如下:

六、对于上面的代码改造之后的优点

1、对于上面的方式,如果需要新加一个打五折和满500送200的促销活动,如何办?

2、只需要在工厂中加了两个条件就可以了。

3、如果加一个促销手段呢?比如,满100积分10点呢?以后积分到一定的时间才可以领取奖品如何做呢?

4、这时学完上面的方案大家可以想到,只要加一个积分算法,然后在构造方法里面有两个参数:条件和返点,让它继承CashSuper类就好了,然后在工厂类里面的分支下加条件。再到界面上改造下就可以了。

七、对于上面的代码改造之后的缺点

1、简单工厂模式只能解决了对象的创建的问题,而且由于工厂本身包括了所有的收费方式。

2、商场的收费方式可能会经常变化的,每次维护或者扩展收费方式都要改动这个工厂,然后重新编译和部署是很麻烦的。所以不是最好的解决办法。


下回解决~,今天先到这了,明天见~~~

相关文章
|
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
面试官问,你在开发中有用过什么设计模式吗?我懵了