大话设计模式(二)策略模式+简单工厂

大话设计模式——策略模式 大话设计模式——策略模式需求做一个商场收银软件,营业员根据客户所购买商品的单价和数量向客户收费。即简单的收银软件。简单实现利用Java的GUI编程,作出一个可视化界面如下。这里利用了IntelliJ IDEA的GUI Designer来进行界面功能编写,会用的话还是挺方便的。 业务逻辑还是比较简单的,主要就是确定按钮和重置按钮的监听事件。源码配合注释如下:import javax.swing 阅读详情

策略模式

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

/**
*定义一个抽象的父类,包含一个抽象的算法Amethod
*
/
public abstract class Strategy {
	
	public abstract void Amethod();
	
}

/**
*A类用A的实现去实现算法A
*
/
public class ConcreteStrategyA extends Strategy{
	
	/**
	 * 算法A的具体实现
	 */
	@Override
	public void Amethod() {
		// TODO Auto-generated method stub
			
	}
}

/**
*同样的可以有B或者C,D算法
*
/

配置一个Context来维护Strategy的引用

public class Context {

	Strategy strategy;
	
	public Context(Strategy strategy) {
		// TODO Auto-generated constructor stub
		this.strategy = strategy;
	}
	/**
	 * 上下文接口,根据具体的策略对象,调用其算法的方法
	 */
	public void ContextInterface() {
		
		strategy.Amethod();
		
	}
	
}
		/**
		 * 根据不同的需求去实例化不同的算法
		 */
		Context context = new Context(new ConcreteStrategyA());
		Context contextB = new Context(new ConcreteStrategyB());
		//实例化对象不同,所以调用的算法就不同

策略模式+简单工厂


  • 加上简单工厂的话,就是在上下文管理类的地方使用上工厂类,传入不同的值,就实例化不同的对象。
	Strategy strategy;
	
	public Context(String type) {
		// TODO Auto-generated constructor stub
		switch (type) {
		case "A":
			this.strategy = new ConcreteStrategyA();
			break;
		case "B":
			this.strategy = new ConcreteStrategyB();
		default:
			break;
		}
		
	}
	/**
	 * 上下文接口,根据具体的策略对象,调用其算法的方法
	 */
	public void ContextInterface() {
		
		strategy.Amethod();
		
	}
		/**
		 * 根据不同的需求去实例化不同的算法
		 */
		Context contextA = new Context("A");
		contextA.ContextInterface();
		Context contextB = new Context("B");
		contextB.ContextInterface();
策略模式的Strategy类层次为Context定义了一系列的可供重用的算法或行为。继承有助析取出这些算法的公共功能。可以以相同的方式调用所有的算法,并针对不同的算法做专门的单元测试,降低了算法类之间的耦合度。
《大话设计模式》之--第2章 商场促销----策略模式 《大话设计模式》带给我一种全新的神奇的学习方式和思维,相比较GOF的《设计模式》而言,这本书更易于理解。鉴于目前网上的PDF大都是对本书拍照,而非文档,所以读起来很不清晰,也不能复制粘贴,因此本人决定整理并放到博客上,自己学习的同时能够方便大家。整理过程保证内容的一致性,根据本人的习惯可能会对某些语句做小的改动,在此向原作者程杰致以崇高的敬意! 阅读详情

相关推荐

手把手教你用Verilog实现AT24C64的I2C读写(附完整仿真流程)

本文详细介绍了如何使用Verilog HDL设计AT24C64 EEPROM的I2C控制器,并配合ModelSim完成完整的仿真验证流程。内容涵盖I2C协议解析、Verilog状态机设计、AT24C64读写操作实现,以及仿真波形分析和调试技巧,为FPGA开发者提供了一套完整的EEPROM控制解决方案。

3c4x5z6v7b的博客 845

策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户端。

1. 先设计一个模拟鸭子的游戏,游戏中会出现各种鸭子,一遍游泳戏水,一边呱呱叫。 2. 现在鸭子需要添加飞的功能,我们给超类加上新的fly功能,子类继承并实现 3. 如果某一种子类不会飞,那么继承就不是合适的选择方式,如下: 、 如上,有两个问题,1. RubberDuck覆盖了quack();2. RubberDuck不会飞,缺继承了fly()。 一种简单的解决方案是,将fly()覆盖为什么也不做。但是如果又有新的子类不会叫也不会飞呢,那么是不是得继续覆盖新的子类的quack()和...

cxt1248039066的博客 727

TL3562/3568内核驱动移植实战:解决无锡沐创N500L-AM4网口异常问题

本文详细介绍了在TL3562/3568平台上移植无锡沐创N500L-AM4网卡驱动的实战经验,重点解决了第四个网口通讯异常问题。通过升级驱动版本至rnpgbe-0.2.3,生成关键头文件并正确配置内核,最终实现四个网口稳定工作。文章还提供了性能优化建议和避坑指南,为类似硬件驱动移植项目提供参考。

weixin_28273593的博客 180

三、大话设计模式之策略与工厂结合

GOOD:客户端只需访问Context类,而不用知道其它任何类信息,实现了低耦合。 在上例基础上,修改下面内容 //策略基类 class COperation { public: int m_nFirst; int m_nSecond; virtual double GetResult() { double dResult = 0; return dResult; } }...

xdx2ct1314的专栏 271

B-Tree数据存储

SQLITE数据存储1. B-Tree的优势  在SQLite中数据库、表、索引都是通过B-Tree和B+Tree的形式进行存储的。如果采用传统的二叉树查找树、红黑树的查找深度一般为log2(N) \log{_2}(N)(其中N表示的是整个树的关键字的数目),在数据库中如果存储的资源过多,就会导致查找一个数据过程中出现较多的磁盘I/O操作,而过多的磁盘操作就会导致整个查找的效率较低,而基于二叉树的一

Promiscuous_youth的博客 1141

MediaCodec视频解码流程详解及参考demo

本文主要讲解mediacodec的视频解码流程,及demo参考例子。

分享音视频技术 7873

设计模式系列(行为型模式)之三 策略模式

策略模式 策略模式定义了算法家族,分别封装起来,让它们之间可以互相替换。此模式让算法的变化不会影响到使用算法的用户。策略模式常用于消除大量的if else代码。 策略模式的主要优点如下。 多重条件语句不易维护,而使用策略模式可以避免使用多重条件语句。 策略模式提供了一系列的可供重用的算法族,恰当使用继承可以把算法族的公共代码转移到父类里面,从而避免重复的代码。 策略模式可以提供相同行为的不同实现,客户可以根据不同时间或空间要求选择不同的。 策略模式提供了对开闭原则的完美支持,可以在不修改原代码的情况下,灵活

javafg的博客 211

机器学习笔记之玻尔兹曼机(一)基本介绍

在受限玻尔兹曼机——模型表示(Representation)一节中以玻尔兹曼机为引,介绍了受限玻尔兹曼机。从本节开始,将正式介绍玻尔兹曼机。相比于它的表示和推断过程,我们更关注它在求解过程中出现的问题。

静静的学习就好 7924

策略模式

策略模式

tangyuzhidao的博客 376

计算机三级考试嵌入式系统重点精简汇总

第一章 嵌入式系统概论 1.1.1嵌入式系统 (1)特点:(1)专用性;(2)隐蔽性;(3)资源受限;(4)高可靠性;(5)实时性;(6)软件固化。 (2)应用:(1)冰箱、洗衣机、电饭煲、空调、摄影机、DVD播放器等;(2)数控机床、飞机、汽车、电梯、X光机、血压计等;(3)电话机、传真机、打印机、pos机、GPS导航仪、路由器等。 1.1.2嵌入式系统组成与分类 (1)逻辑组成:硬件和软件,分为处理器、存储器、I|0设备与I|O接口,数据总线; (2)处理器:分为主处理器(CPU)和协处

chemkrik的博客 1万+

NVIDIA A100驱动及CUDA安装指南

NVIDIA A100驱动及CUDA安装指南:详细介绍了在Ubuntu系统下安装A100显卡驱动和CUDA工具包的完整流程,包括环境准备、驱动安装、CUDA配置及性能优化建议。特别推荐猿界算力平台提供开箱即用的A100算力租赁服务,具备专业团队支持、灵活租期和实惠价格等优势。文末通过PyTorch测试验证了A100设备的可用性,展示了80GB显存的强大计算能力。

2401_89353317的博客 1511

自学大话设计模式——简单工厂模式与策略模式

本人的几点浅见,各位大大不喜勿喷,欢迎带批评不带批评带表扬不带表扬的文明的评论。 今天通读了《大话设计模式》这本书的简单工厂模式与策略模式两个模式的介绍,生出部分感想以及疑问在此记录以便后查 简单工厂模式: 定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类 先说说简单工厂模式,书中以计算器为例子引入工厂模式。场景为设计一个计算器类,分别拥...

雏鹰 1075

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

拜读经典——大话设计模式(二)——简单工厂模式、策略模式

前言: 继续拜读经典,学习简单工厂模式以及策略模式 简单工厂模式 计算器 我们先来以面向对象的思想来做一个简单的计算器: Operation.cs class Operation { private double _numberA = 0; private double _numberB = 0; public double NumberA { get { return...

#的博客 297

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

大话设计模式-策略模式与简单工厂模式

策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。 例如: CashNormal、CashRebate、CashReturn三种算法(正常收费、打折收费、返利收费),都继承CashSuper。如果还有

吴零敏 2721

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

大话设计模式解读02-策略模式

本篇文章,来解读《大话设计模式》的第2章——策略模式。并通过Qt和C++代码实现实例代码的功能。

码农爱学习的博客 1450

大话设计模式-策略模式

大话设计模式-策略模式笔记,都是自己的浅薄理解,有问题希望大佬帮我指正。万分感谢!!!

x1027105273的博客 721

大话设计模式 商场促销 工厂模式和策略模式 c++

对与简单工厂和策略模式的理解: 策略模式是一种定义一系列算法的方法 策略模式就是用来封装算法的 区别在于主函数的 策略进行了进一步的封装 客户端不需要知道 从实例化到具体方法的过程 策略模式传入Context是个策略 在context进行具体的实现方法 工厂模式返回了一个方法 以下是工厂设计模式: #include using namespace std; class Cash {

EricTCartman的博客 843

设计模式——简单工厂+策略模式

主要参考:《大话设计模式》 1.简单工厂模式: 输入:对象特征(字符串) 输出:对象 方法:Factory,选取对象 选取方式:利用switch选取对象。 优点:客户不需要知道具体调用哪个对象,只需要知道使用该对象特征。 弱点:封装性不够高,客户端须知道工厂与需操作对象(抽象类)两个类。 2.策略模式: 输入:需操作的对象 输出:最终结果 方法:Result,统一调用

DirkNow的专栏 1050

设计模式:简单工厂_策略模式_工厂方法

提示:本文是作者根据——程洁《大话设计模式》的总结和感悟,内容可能不涉及相关代码实现,或许不适合初学,仅作参考,请有条件的读者购书进行系统学习,或浏览其他网页进行学习。 目录 本文内容概要 简单工厂 策略模式 工厂方法 简单工厂和工厂方法_实现对比 1.简答工厂: 如果是实现一个计算器,就要考虑加减乘除的功能,那么这些功能就要封装成函数,但是处于对未来维护的考虑,把相...

Water_st的博客 316

《大话设计模式》快速学习

业务逻辑与界面逻辑分开,降低耦合度,容易维护或扩展。

big_good_boy的博客 1470

大话设计模式之简单工厂模式和策略模式(C++实现)

总结两者的实现代码区别简单工厂模式代码策略模式代码main函数调用代码区别 简单工厂模式代码 CashSuper* CashFactory::createCashAccept(char type) { //简单工厂模式 CashSuper *cs = NULL; switch (type) { case 'n': cs = new CashNormal(); break; case 'r': cs = new CashReturn(300, 100); break; case

mxyhktk的博客 372

《大话设计模式》之 策略模式 Delphi实现

{  策略模式   :用来封装算法,处理各种变法,而简单工厂模式,则是解决创建对象的问题  策略(Strategy)模式的用意是定义一组算法(algorithms),并将每个算法封装到具有共同接口的独立的类中,  从而使它们可以相互替换。  策略模式让算法变化独立于使用它的客户端   使用情景,商场促销,进行商品打折,应用不同的算法,故采用策略模式。 1。一

tjb_1216的专栏 1338

简单工厂模式和策略模式对比C++版本-大话设计模式

简单工厂模式和策略模式的区别? 简单工厂模式的实例化由工厂类来实现,用户只需要传递一个条件,由工厂生产出相应的类; 策略模式需要用户自己实例化类,传递的是实例化的对象。 简单工厂模式 //简单工厂模式 class drink { public: virtual void getResult(){} }; class caffe:public drin...

abcdefgh111810的博客 209

由简单工厂、工厂、策略模式引发的思考

“策略是事件的策略,工厂是方法的工厂。”设计模式的名都是有故事的 此话怎讲? 在做计算器的练习中我们用到的是简单工厂模式,具体代码可参考《大话设计模式》这本书,来看思路。 计算器要想实现计算这件事需要4个“人”的参与:两个运算数字、一个算符(+ - * /)、一个结果。 用初学者的方式就是将这4个“人”排好队,用if语句对应计算就OK了,没毛病。但是多个if语句的使用违背了编程的一个原则:...

九 248
上一篇: 大话设计模式(一)简单工厂模式
下一篇: JVM垃圾回收算法
coding_zhao
博客等级 码龄9年 3粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值