设计模式之策略模式

Windows 11 的C盘User(用户)文件夹下的用户文件夹名称的修改 背景介绍:由于系统重装导致Windows 11的系统用户名与C盘User(用户)文件夹下的用户名文件夹(公用文件夹旁边的文件夹)出现名称不一致,事例中系统用户名命名为“寂萧”,User(用户)文件夹下的文件夹名称却是“77555”。【QQ邮箱前五位真的真的看着很别扭】注:改名有风险,三思而后行。User(用户)文件夹下的用户名是中文在某些软件的应用场景下产生不便,导致很多软件莫名其妙报错,甚至无法使用,笔者不建议修改为中文名。//和笔者一样的强迫症除外// 阅读详情

       这里我们还是用《Head First》一书中的例子来进行讲解,一步步来引出策略模式,在前几篇文章中我们分别分享了设计模式入门和单例模式以及非常重要的观察者模式,如果需要大家可以去看看,今天我们来由浅入深的一起来看看策略模式,看看策略模式的定义,在实际编码的过程中能解决那些重要的问题,以及主要是在那些场景下去使用,还有最重要的就是我们在实际的编码中如何一步步去实现


一、策略模式的定义


策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们还可以相互替换,策略模式让算法独立于使用它的客户而独立变化


二、策略模式的使用场景

  • 针对同一问题的多种处理方式,仅仅是具体的行为有差别时
  • 需要安全的封装多种同归类型的操作时
  • 出现同一抽象类有多个子类,而又需要使用 if-else 或者 switch-case 来选择具体的子类时

三、策略模式演绎


       Joe 上班的公司做了一套相当成功的模拟鸭子的游戏,游戏中会出现各种鸭子,一边游泳戏水,一边呱呱叫,此系统的内部设计使用了标准的 OO 技术,设计了一个鸭子超类,并让各种鸭子继承此超类,下面来看一下模型图:


       上面就是模型图,相信大家一看就一目了然,所有的鸭子都会呱呱叫(quack)也会游泳(swim)所以由超类负责处理这部分的实现代码,因为每一种鸭子的外观都不同,所以 display() 方法是抽象的,然后每个鸭子类型负责实现自己的 display() 行为在屏膜上显示其外观


      去年,公司的竞争力加剧,需要创先的时候到了,主管们确定,此模拟程序需要需要让鸭子会飞,按照 OO 的设计思想实现这个也简单,Joe 直接在父类里加上了 fly() 方法,这样所有的鸭子就都会飞了,但是事情并不是这么简单,Joe 忽略了一件事,并不是所有的鸭子都会飞,在超类中加上新的 fly() 行为,会使某些不适合该行为的也具有该行为,Joe 想到可以把不会飞的鸭子的 fly() 方法覆盖掉,可是我们如果以后又加入一种鸭子,既不会飞也不会叫,这又该怎么办,Joe 意识到可能继承不能解决目前的问题,需求会不断改变,每当新的鸭子子类出现,就需要被迫检查覆盖新增,将会是无穷的噩梦,所有我们需要设计一个更加清晰的方案,来满足随时变化的需求,而不是一味地修改覆盖代码,这样代码的复用性也就变得很差,和我们设计模式的初衷慢慢偏离


       我们知道,并非所有的鸭子子类都具有飞行和呱呱叫的行为,所以继承并不是适当的解决方式,这里我们想到使用接口,我们可以把 fly() 从超类只取出来,放进一个 Flyable 接口中,这么一来,只有会飞的鸭子实现此接口,同样的方式,也可以用来设计一个Quackable 接口,因为不是所有鸭子都会叫,到这里好像是解决了一部分问题,但却也引出了新的问题,虽然 Flyable 和 Quackable 接口可以解决一部分问题,但却造成了代码无法复用,我们从一个坑掉进了另一个坑,甚至以后我们的鸭子中会飞的鸭子的飞行动作可能都不一样,会有多种变化.....


       现在我们知道继承有时候并不能很好的解决问题,因为鸭子的行为在子类里不断的改变,并且让所有的子类都有这些行为是不恰当的,Flyable 和 Quackable 接口一开始觉得还挺不错,从一定程度上解决了问题,但 Java 接口不具有实现代码,所以继承接口无法达到代码的复用,这意味着,无论何时你需要修改某个行为,你必须得往下追踪并在每一个定义此行为的类中来修改它,一不小心可能又会造成新的错误,这样我们就看如何用策略模式来解决我们眼下遇到的问题


1.设计原则:

       找出应用程序中可能需要变化之处,把它独立出来,不要和那些不需要变化的代码混在一起,换句话说,如果每次新的需求一来,都会使某方面的代码发生变化,那么你就需要确定,这部分代码需要被抽出来,和其他稳定的代码有所区分,这样的概念很简单,几乎是每个设计模式背后的精神所在,所有的模式都提供了一套方法,让系统的中某一部分改变不会影响其他部分


2.分开变和不变

       现在我们要分开变和不变,我们准备建立两种类完全从 Duck 超类中分离出来,一个是fly相关的,一个是 quack 相关的,我们知道 Duck 类内的 fly() 和 quack() 会随着鸭子的不同而改变 


3.设计鸭子的行为

       如何设计那组实现飞行和呱呱叫的行为类呢?我们希望一切能有弹性,毕竟正是一开始鸭子的行为没有弹性,才让我们走上这条路,我们还想能够指定行为到鸭子的实例,比方说,我们想要产生一个绿头鸭实例,并指定特定行为的飞行行为给它,这里就要说第二个设计原则


4.第二个设计原则

       针对接口编程,而不是针对实现编程,我们利用接口代表每一个行为,比方说,FlyBehabior 和 QuackBehavior,而行为的每个实现都将实现其中的一个接口,所以这次鸭子类不会负责实现 Flying 和 Quacking 接口,反而是由我们制造一组其他类专门实现 FlyBehabior 和 QuackBehavior,这就称为“行为”类,由行为类而不是 Duck 类来实现行为接口,这样的做法迥异于以往,以前的额做法是:行为来自 Duck 超类的具体实现,或是实现某个接口,并由子类自行实现,这两种做法都是依赖于实现,我们被绑得死死的,没办法更改行为除非写更多的代码,在我们新的设计中,鸭子的子类将使用接口(FlyBehabior 和 QuackBehavior)所表示的行为,所以实际的实现不会被绑死在鸭子的子类中,换句话说,特定的具体行为编写在实现了 FlyBehabior 和 QuackBehavior 的类中


5.实现鸭子的行为

在此,我们有两个接口,FlyBehavior 和 QuackBehavior,还有他们对应的类,负责实现具体的行为:


       上面就是模型图,左边的是 FlyBehavior 接口,所有飞行类都实现它,所有新的飞行类都必须实现 fly() 方法,这里我们实现了两种动作,所有有翅膀的鸭子飞行动作,实现了所有不会飞鸭子的动作,右边是 QuackBehavior 接口,包含一个需要是现实的 quack() 方法,并且实现了不同的叫法,呱呱叫和吱吱叫,以及什么都不做,这样的设计,可以让飞行和呱呱叫的动作被其他的对象复用,因为这些行为已经与鸭子类无关了,而我们还可以新增一些行为,不会影响到既有的行为类,也不会影响使用到飞行行为的鸭子类


6.整合鸭子的行为

关键在于,鸭子现在会将飞行和呱呱叫的动作委托别人处理,而不是使用定义在 Duck 类(或子类)内的呱呱叫和飞行方法,做法是这样的:

6.1 首先,在 Duck 类中“加入两个实例变量”,分别为 “flyBehavior” 和 “quackBehavior”,声明为接口类型(而不是具体类实现类型),每个鸭子对象都会动态地设置这些变量以在运行时引用正确的行为类型(例如:FlyWithWings、Squeak 等),我们必须将Duck 类与其所有子类中的 fly() 和 quack() 删除,因为这些行为已经被搬到 FlyBehavior 与 QuackBehavior 类中了,我们用两个相似的方法 performFly() 和 performQuack() 取代 Duck 类中的 fly() 和 quack(),稍后你就会知道为什么



6.2 现在我们用代码来实现


首先是 FlyBehavior 行为接口

/**
 * 所有飞行行为类必须实现的接口
 * 
 * @author qiudengjiao
 */
public interface FlyBehavior {
	void fly();
}

接下来是 FlyBehavior 行为接口的两个具体实现类 FlyWithWings 和 FlyNoWay

/**
 * 这是飞行行为的实现,给真会飞的鸭子用
 * 
 * @author qiudengjiao
 *
 */
public class FlyWithWings implements FlyBehavior {

	@Override
	public void fly() {
		System.out.println("我飞了");
	}
}

/**
 * 飞行行为的实现,给不会飞的鸭子用
 * 
 * @author qiudengjiao
 *
 */
public class FlyNoWay implements FlyBehavior {

	@Override
	public void fly() {
		System.out.println("我不会飞");
	}
}

接下来我们来编写叫的行为 QuackBehavior 接口

/**
 * 所有叫行为类必须实现的接口
 * 
 * @author qiudengjiao
 */
public interface QuackBehavior {
	void quack();
}

接下来是 QuackBehavior 接口的具体实现类 Quack、MuteQuack 和 Squeak

/**
 * 叫行为的实现,给呱呱叫
 * 
 * @author qiudengjiao
 *
 */
public class Quack implements QuackBehavior {

	@Override
	public void quack() {
		System.out.println("呱呱叫");
	}
}

/**
 * 叫行为实现类,什么也不做行为
 * 
 * @author qiudengjiao
 *
 */
public class MuteQuack implements QuackBehavior {

	@Override
	public void quack() {
		System.out.println("什么也不做");
	}

}

/**
 * 叫行为实现,吱吱叫
 * 
 * @author qiudengjiao
 *
 */
public class Squeak implements QuackBehavior {

	@Override
	public void quack() {
		System.out.println("吱吱叫");
	}
}


现在我们来实现我们需求的鸭子超类 Duck 类


/**
 * Duck 超类
 * 
 * @author qiudengjiao
 */
public abstract class Duck {

	// 为行为接口类型声明两个接口变量,所有鸭子子类都继承它们
	FlyBehavior flyBehavior;
	QuackBehavior quackBehavior;

	/**
	 * 具体实现委托给飞行行为类
	 */
	public void performFly() {
		flyBehavior.fly();
	}

	/**
	 * 具体实现委托给叫行为类
	 */
	public void performQuack() {
		quackBehavior.quack();
	}

	// 不会发生更改的行为
	public void swim() {
		System.out.println("所有鸭子都会游泳");
	}

	/**
	 * 具体外观实现类
	 */
	public abstract void display();

}

接下来终于到具体的鸭子实现类了,我们来看绿头鸭 MallardDuck 类


/**
 * 绿头鸭子类(也就是具体的实现类)
 * 
 * @author qiudengjiao
 */
public class MallardDuck extends Duck {

	public MallardDuck() {
		
		// 绿头鸭使用Quack类处理呱呱叫,所以当performQuack()被调用时,叫的职责被委托给Quack对象,而我们得到了真正的呱呱叫
		quackBehavior = new Quack();
		// 使用FlyWithWings作为FlyBehavior类型
		flyBehavior = new FlyWithWings();

		display();
	}

	@Override
	public void display() {
		System.out.println("我是绿头鸭子");
	}
}

这样就实现了我们具体的鸭子--绿头鸭,别忘了,因为 MallardDuck 继承了 Duck 类,所以具有 quackBehavior 和 flyBehavior 实例变量


接下来我们来测试一下我们能不能实现我们的需求


/**
 *  Test 类
 * @author qiudengjiaoÏ
 */

public class Test {
	
	public static void main(String[] arg) {
		
		Duck mallard = new MallardDuck();
		
		//这会调用MallardDuck()继承来的performQuack()方法,进而委托给该对象的QuackBehavior对象处理
		//也就是说调用继承来的quackBehavior引用对象的quack()方法
		mallard.performQuack();
		
		//道理同上
		mallard.performFly();
	}
}


运行结果:



       这样就实现了我们的需求,并且极易以后的扩展维护,由于上面的注释已经非常清楚就不在一一具体说明,相信大家一看就会非常明白,最后希望大家亲自动手去敲一下,绝对会有不一样的效果,今天就写到这,如有错误请指出



03、AC分析 本节我们将对之前的BUCK电路进行AC分析! 首先,我们之前的BUCK电路是开环电路,现在我们把它设计成闭环电路!电路图如下: 我们对闭环BUCK电路先瞬态仿真一下,波形如下: 然后在电路中加入小信号和波特图进行AC仿真 原理图如下: 增益为0时所对应的相位裕度为56°,这个相位裕度一定要大于0°,大于45°则比较稳定! ... 阅读详情

相关推荐

Python自动化办公:5分钟搞定钉钉群文件自动发送(附完整代码)

本文详细介绍了如何利用Python实现钉钉群文件的自动化发送。通过结合钉钉企业内部应用与群机器人API,构建了包含智能令牌管理、文件上传与消息发送的完整工作流。文章提供了可直接复用的完整代码,并分享了定时任务、目录监听等进阶实战方案,帮助职场人士高效解决重复性文件发送难题,实现办公自动化。

7z8x2c4v6b9的博客 325

设计模式之策略模式(Strategy Design Pattern)

模板模式,是11种行为型模式之一。在 GoF 的《设计模式》一书中,它是这样定义的:Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it.翻译成中文就是:定义一系列算法(策略),封装每一个算法(策略),并使它们可以互换。使算法(策略)可以独立于使用它的客

xjj1314的专栏 428

毕业设计——基于卷积神经网络的高速公路团雾智能识别系统设计与实现(数据集+源码+可视化+综述)

同时,也可以结合其他技术,如雷达、红外传感器等,实现多源信息的融合与协同处理,提高系统的可靠性和稳定性。实验结果表明,该系统能够实现对高速公路团雾的准确、快速识别,为高速公路的安全运行提供了有力保障。团雾作为一种常见的气象现象,具有突发性、局地性和消散迅速的特点,对高速公路的行车安全构成严重威胁。通过设计合适的网络结构,如增加卷积层、池化层等,实现对图像中团雾特征的自动学习和提取。预处理:对采集到的图像进行去噪、增强等预处理操作,以提高图像质量,降低后续处理的难度。读取数据,随机分为训练集和验证集。

abackcab的博客 667

23种设计模式之策略模式(Strategy Pattern)

本篇文章将23种设计模式中的策略模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。

小威的博客 1万+

汽车售后诊断 ODX 和 OTX 对比分析报告

在汽车行业不断发展的当下,汽车售后诊断技术对于保障车辆性能、维护车主权益以及提升汽车品牌服务质量起着至关重要的作用。随着汽车电子化程度的不断提高,售后诊断所涉及的数据和流程愈发复杂,这就促使行业需要更加标准化、高效化的诊断技术方案。开放诊断数据交换(ODX)和开放测试序列交换(OTX)便是在这样的背景下应运而生的两种重要标准,它们为汽车售后诊断提供了强大的支持。本报告将深入剖析 ODX 和 OTX 的技术细节、应用场景、优势与挑战,并进行全面的对比,旨在为汽车行业从业者在选择和应用这两种标准时提供有价值的参

芊言凝语 1638

手把手教你用HiNet实现图像隐藏:可逆神经网络实战指南(附代码)

本文提供了一份基于HiNet框架实现图像隐藏的实战指南。通过详细解析可逆神经网络原理,手把手指导环境搭建、模型构建、损失函数设计及训练流程,并附有完整代码。该方法利用单个可逆网络统一隐藏与恢复过程,结合小波变换提升隐蔽性,为信息隐藏应用提供了高效解决方案。

rgv234567的博客 433

设计模式-策略模式-Strategy Pattern

策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列的算法,并将每一个算法封装起来,使它们可以互换使用,算法的变化不会影响使用算法的用户。策略模式的优点包括算法的封装和切换的灵活性,以及算法可独立于使用它的客户端变化。:如果算法的实现非常复杂,或者算法可能会随着时间而变化,策略模式可以帮助管理这种复杂性,使得算法的变化不会影响到使用算法的代码。:在需要根据不同条件动态切换算法的场景中,策略模式可以提供灵活的算法切换机制,例如,根据输入数据的特性选择不同的算法。

wesigj的博客 1456

18、探索隐私工程技术的前沿:从理论到实践

本文深入探讨了隐私工程技术的核心概念、关键技术及其应用场景,分析了加密技术、访问控制和用户界面设计等在隐私保护中的作用,并结合数据库保护、物联网设备等实际场景进行阐述。同时,文章还讨论了隐私工程技术面临的挑战与未来发展趋势,提出了数据最小化原则、差分隐私、隐私增强技术等优化策略以及隐私设计、隐私影响评估等最佳实践,最后展望了新兴技术对隐私保护的影响及法规推动下的发展方向。

weixin_35307279的博客 373

C++设计模式——策略模式(Strategy Pattern)

C++设计模式——策略模式(Strategy Pattern) 微信公众号:幼儿园的学霸 目录 文章目录C++设计模式——策略模式(Strategy Pattern)目录定义实现示例传统的策略模式实现使用函数指针实现策略模式工厂模式和策略模式对比总结参考资料 定义 Define a family of algorithms,encapsulate each one,and make them interchangeable. 定义一组算法,将每个算法都封装起来,并且使它们之间可以互换 策略模式是指定

leonardohaig的博客 4773

影楼精修-肤色统一算法解析

本文介绍了影楼精修中肤色统一算法的实现方案,并以像素蛋糕软件为例进行详细分析。肤色统一旨在通过调整人像照片中皮肤区域的颜色,使其看起来更加均匀一致。像素蛋糕软件提供了AI肤色统一和传统肤色统一两种功能,分别适用于不同需求。传统肤色统一算法通过皮肤分割、人脸检测、亮度统一和颜色统一等步骤,实现了对皮肤区域的精细调整。文章还提供了亮度统一的核心代码,并对比了传统算法与AI算法的效果,指出AI算法在自然度和亮度矫正方面表现更优。整体而言,本文为影楼精修中的肤色统一提供了实用的技术参考。

Trent1985的专栏 2068

从 SAP GUI 到 API 自动化,为什么 SAP 团队必须把 API 拉到路线图中央

摘要: SAP项目正从传统手工操作转向API驱动,以应对业务敏捷性需求。API不仅是技术接口,更是核心业务能力的标准化封装,助力自动化、低代码、AI集成和系统升级。通过SAP Business Accelerator Hub等工具,企业可复用标准API替代定制开发,减少技术债。API还赋能自动化平台、实时集成和AI Agent执行,确保安全治理与审计追踪。未来,API将成为企业系统与AI交互的核心桥梁,缺乏API将迫使业务依赖脆弱的UI自动化方案。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 302

设计模式-策略模式(Strategy Pattern)

设计模式-策略模式(Strategy Pattern)

weixin_45226668的博客 1506

苏宁易购手机行情比价系统:构建一个完整的Python爬虫实战指南

在当今数字化时代,智能手机已成为人们生活中不可或缺的一部分。随着各大手机品牌每年推出多款新品,消费者面临着越来越多的选择。然而,不同电商平台、不同时间段的价格波动使得消费者很难把握最佳购买时机。苏宁易购作为国内领先的电商平台之一,拥有丰富的手机商品信息和价格数据。本文将带领读者构建一个完整的苏宁易购手机行情比价系统,帮助消费者实时掌握手机价格动态。

2201_76125261的博客 207

设计模式:策略模式(Strategy Pattern)

策略模式是一种行为型设计模式,它定义了一系列算法,把它们一个个封装起来,并且使它们可以相互替换。这样,算法的变化不会影响到使用算法的客户。

TechNomad的博客 1262

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

23种设计模式-19策略模式(Strategy Pattern)

策略模式是在开发中最常见的设计模式之一,本文介绍了策略的基本原理及使用场景,以及基于 java 代码的普通实现和基于Spring 的实现案例。

不开心就吃辣 1872

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

设计模式之策略模式(DesignPattern of Strategy)

C++版设计模式之策略模式

一路Coding 593

设计模式之策略模式(Strategy Pattern)

设计模式中有六大原则和二十三设计模式。 其中六大原则分别为:单一职责原则、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则。 二十三设计模式:单例模式、Builder 模式、原型模式、工厂方法模式、抽象工厂模式、策略模式、状态模式、责任链模式、解释器模式、命令模式、观察者模式、备忘录模式、迭代器模式、模版方法模式、访问者模式、中介模式、代理模式、组合模式、适配器模式、装饰模式、享元模式、外观模式、桥接模式。

Mr_Four 608

设计模式教程:策略模式(Strategy Pattern)

定义一系列算法,将每个算法封装起来,并让它们可以互换,使得算法的变化独立于使用算法的客户。

遇见伯灵说的博客 978

每天一个设计模式之策略模式(Strategy Pattern)

策略模式的适用场景是,当一个系统中只有算法策略变化,而其他都不变,这时候应当将算法隔离开,策略模式就是解决这类问题的模式。

Dive Deep into The Knowledge 469

【设计模式】策略模式(Strategy Pattern)详解

策略模式(Strategy Pattern)是一种行为型设计模式,

qq_59344127的博客 1839

Java设计模式--策略模式【Strategy Pattern】

策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。    策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一个算法封

CoderLover 541

Java设计模式之策略模式(Strategy Pattern)

一、什么是策略模式 策略模式(Strategy Pattern)是一种简单常用的设计模式,也叫做政策模式(Policy Pattern),它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。 ...

qq_36697880的博客 368

23种设计模式——策略模式 (Strategy Pattern)​详解

本文介绍了23种经典设计模式之——策略模式 (Strategy Pattern)​的说明及使用

Meteors.的博客 837

设计模式之策略模式(Strategy Pattern)

目录 什么是策略模式? 适用场景 实现步骤 具体实现: 优缺点 参考 什么是策略模式? 一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 将可变的部分从程序中抽象分离成算法接口,在该接口下分别封装一系列算法实现,并使它们可以互相替换。 适用场景 在历史遗留项目中如果有许多的类仅仅是行为的差异 运行时选取不同的算法变体 通过条件语句在不同的分支中选取一个 补充: 继承是重用代码的利器,但继承并不总是最好的工具 复合优先于继承,多用组合,少用继承 组合定义:

浮煌的博客 312

Java设计模式教程-策略模式(Strategy Pattern)

相关源码 1 简介 1.1 定义 也叫做政策模式(Policy Pattern) wiki 对象有某个行为,但是在不同的场景中,该行为有不同的实现算法.。比如每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法. 定义 Define a family of algorithms,encapsulate each one,and make them interchangeable. 定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。 常见 if/els

JavaEdge全是干货的技术号 1324

C++设计模式——策略模式(strategy pattern)

一、原理讲解 1.1意图 定义算法簇,将这些算法封装起来,之间可以相互替换。这样的好处在于,使得算法可以独立于使用它的客户而变化。 1.2与模板方法区别 模板方法主要是继承接口类,而策略模式主要是组合接口类,两种方法核心区别在于,是继承?还是组合? 设计模式八大原则之一:优先使用对象组合,而不是类继承。 1.3设计步骤 a1 先定义一个接口类最为抽象基类ABC a2 定义一系列算法...

净无邪博客 1275
上一篇: 设计模式入门
下一篇: 2017 Android GitHub 常用开源框架汇总
QDJdeveloper
博客等级 码龄11年 108粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值