软件体系结构命令模式与策略模式课堂讲解
- 格式:pptx
- 大小:915.08 KB
- 文档页数:22
软件体系结构与设计模式---------策略模式策略模式(别名:政策)策略模式是一个很简单的模式,也是一个很常用的模式。
它定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。
策略模式让算法独立于使用它的客户而独立变化。
策略模式应用的原则就是:找到系统中变化的部分,将变化的部分同其它稳定的部分隔开。
面向接口编程,而不要面向实现编程优先考虑使用对象组合,而不是类继承。
一、概述策略模式是处理算法的不同变体的一种成熟模式,策略模式通过接口或抽象类封装算法的标识,即在接口中定义一个抽象方法,实现该接口的类将实现接口中的抽象方法。
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。
策略模式让算法独立于使用它的客户而独立变化。
减少了各种算法类与使用算法类之间的耦合。
在策略模式中,封装算法标识的接口称作策略,实现该接口的类称作具体策略。
二、策略模式的结构与使用(一)策略模式的结构中包括三种角色:1、抽象策略角色(Strategy)2、具体策略角色(Concrete Strategy)3、环境角色(Context)下图2-1为策略模式的UML类图表示图2-1策略模式的UML类图(二)策略模式的结构的描述与使用下面的例子利用策略模式在排序对象中封装了不同的排序算法,这样以便允许客户端动态的替换排序策略(包括Quick sort、Shell sort和Merge sort)。
1.抽象策略(Strategy) :// "Strategy"abstract class Sort Strategy{// Methodsabstract public void Sort( ArrayList list );}2.具体策略(Concrete Strategy):(1)// "ConcreteStrategy"class QuickSort : SortStrategy{// Methodspublic override void Sort(ArrayList list ){list.Sort();Console.WriteLine("QuickSorted list ");}}(2)// "ConcreteStrategy"class ShellSort : SortStrategy{// Methodspublic override void Sort(ArrayList list ){list.ShellSort();Console.WriteLine("ShellSorted list ");}}3.环境策略:public class GymnasticsGame{ComputableStrategy strategy;public void setStrategy(ComputableStrategy strategy){this.strategy=strategy;}public double getPersonScore(double [] a){if(strategy!=null)return puteScore(a);elsereturn 0;}}三、策略模式的优点提供了一种替代继承的方法,而且既保持了继承的优点(代码重用)还比继承更灵活(算法独立,可以任意扩展)。
软件系统架构设计方法与策略在软件开发过程中,系统架构设计是至关重要的步骤。
一个良好的系统架构可以确保软件系统的稳定性、可扩展性和可维护性。
本文将介绍软件系统架构设计的方法与策略。
一、概述软件系统架构设计是指在软件开发过程中确定软件系统的整体结构和组织方式的活动。
它涉及到系统的各个组成部分之间的关系、模块划分和功能分配等。
一个好的系统架构设计能够提高软件系统的可靠性、安全性和性能。
二、关键原则(1)模块化:将软件系统拆分为多个独立的模块,每个模块负责一个特定的功能。
(2)松耦合:模块之间的耦合度应尽量降低,以便于修改和维护。
(3)高内聚:模块内部的各个组成部分应紧密结合,完成特定功能。
(4)分层次:将整个系统划分为多个层次,每个层次负责不同的功能。
(5)可扩展性:设计时考虑到系统的后续扩展,以方便添加新功能或进行改进。
三、常用方法(1)面向对象方法:采用面向对象的思想和设计模式来进行系统架构设计。
通过定义类和对象之间的关系,实现系统功能的划分和分配。
(2)组件化方法:将系统拆分为多个可独立使用的组件,并通过接口和消息传递来实现组件之间的通信和协作。
(3)服务化方法:将系统的各个功能封装成独立的服务,并通过服务接口来实现不同服务之间的通信和集成。
(4)分布式方法:将系统的各个模块分布在不同的节点上,通过网络来实现模块之间的通信和协作。
四、具体策略(1)确定功能需求:在进行架构设计之前,首先明确软件系统的功能需求,以便进行合理的模块划分和功能分配。
(2)选择合适的架构风格:根据系统的性质和需求,选择适合的架构风格,如分层架构、客户端-服务器架构或者微服务架构等。
(3)制定设计规范:根据系统需求和设计目标,制定相应的设计规范和标准,以保证设计的一致性和可维护性。
(4)进行模块划分:将系统功能划分为多个模块,并定义它们之间的接口和依赖关系。
(5)选择合适的技术和工具:根据系统需求和设计目标,选择适合的技术和工具,如数据库、框架、开发语言等。
【转】策略模式与命令模式区别
策略模式把易于变化的⾏为分别封装起来,让它们之间可以互相替换,让这些⾏为的变化独⽴于拥有这些⾏为的客户。
GoF《设计模式》中说道:定义⼀系列算法,把它们⼀个个封装起来,并且使它们可以相互替换。
该模式使得算法可独⽴于它们的客户变化。
Command命令模式是⼀种对象⾏为型模式,它主要解决的问题是:在软件构建过程中,“⾏为请求者”与“⾏为实现者”通常呈现⼀种“紧耦合”的问题。
GoF《设计模式》中说道:将⼀个请求封装为⼀个对象,从⽽使你可⽤不同的请求对客户进⾏参数化;对请求排队或记录请求⽇志,以及⽀持可撤销的操作。
从这点看:
策略模式是通过不同的算法做同⼀件事情:例如排序
⽽命令模式则是通过不同的命令做不同的事情,常含有(关联)接收者。
⽬标不同!
命令模式是含有不同的命令(含有接收者的请求):做不同的事情;隐藏接收者执⾏细节。
常见菜单事件,
⽽策略模式含有不同的算法,做相同的事情;
区别在于是否含有接收者。
命令模式含有,策略模式不含有。
命令模式中的命令可以单独运⾏。
打个⽐喻就是:
命令模式等于菜单中的复制,移动,压缩等,⽽策略模式是其中⼀个菜单的例如复制到不同算法实现。