Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

策略模式 #39

Open
HealUP opened this issue Jul 6, 2023 · 0 comments
Open

策略模式 #39

HealUP opened this issue Jul 6, 2023 · 0 comments

Comments

@HealUP
Copy link
Owner

HealUP commented Jul 6, 2023

1.UML图
统一建模语言(Unified Modeling Language,缩写UML)是非专利的第三代建模和规约语言。
UML是一种开放的方法,用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的开放方法。
分类:
● UML模型
○ 功能模型:从用户的角度展示系统的功能,包括用例图。
○ 对象模型:采用对象,属性,操作,关联等概念展示系统的结构和基础,包括类别图、对象图。
○ 动态模型:展现系统的内部行为。包括序列图,活动图,状态图。
● UML图
○ 结构性图形(Structure diagrams)强调的是系统式的建模:
■ 静态图(static diagram):包括类图、对象图、包图
■ 实现图(implementation diagram):包括组件图、部署图
■ 剖面图
■ 复合结构图
○ 行为式图形(Behavior diagrams)强调系统模型中触发的事件
■ 活动图
■ 状态图
■ 用例图
○ 交互性图形(Interaction diagrams),属于行为图形的子集合,强调系统模型中的资料流程
■ 通信图
■ 交互概述图
■ 时序图
■ 时间图
下面详细讲解类图
1.1 类图
作用:解析项目的系统结构和架构层次,可以简洁明了的帮助我们理解项目中类之间的关系。
类图的格式:
● 类名:粗体(类是抽象类则类名显示为斜体)
● 属性:
○ 格式:可见性 名称:类型[=默认值]
○ 可见性一般为public、private和protected,在类图分别用+、-和#表示
● 方法:
○ 格式:可见性 名称(参数列表 参数1,参数2) :返回类型
■ 可见性如上名称表达式的介绍
■ 名称就是方法名
■ 参数列表是可选的项,多参数的话参数直接用英文逗号隔开
■ 返回值也是个可选项,返回值类型可以说基本的数据类型、用户自定义类型和void。(如果是构造方法,则无返回类型)
image.png
类与类之间的关系:
泛化(继承)、实现、依赖、关联、聚合、组合
image
聚合:部分可以脱离整理而存在
组合:部分若脱离了整体,则不复存在
关联:长期性的
依赖:临时性的
2.设计模式
2.1 策略模式
image.png
定义一系列算法,将每个算法都封装起来,并且使他们之间可以相互替换。策略模式使算法可以独立于使用它的用户而变化(聚合)
策略模式的结构:
● 环境(Context)角色: 持有一个Strategy的引用;
● 抽象策略(Strategy)角色: 这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口;(关系是:实现或继承)
● 具体策略(ConcreteStrategy)角色: 包装了相关的算法或行为
使用步骤:(举例)
● 定义Strategy接口,包含抽象方法

public interface Strategy {
   public int doOperation(int num1, int num2);
}

● 创建实现接口的实体类:分别是加、减、乘的类,里面封装了这三种算法

public class OperationAdd implements Strategy{
   @Override
   public int doOperation(int num1, int num2) {
      return num1 + num2;
   }
}
public class OperationSubtract implements Strategy{
   @Override
   public int doOperation(int num1, int num2) {
      return num1 - num2;
   }
}
public class OperationMultiply implements Strategy{
   @Override
   public int doOperation(int num1, int num2) {
      return num1 * num2;
   }
}

● 创建 Context 类 (Strategy类是Context的一部分——聚合关系)

public class Context {
   private Strategy strategy;// Strategy类是Context的一部分

    // 有参构造
   public Context(Strategy strategy){
      this.strategy = strategy;
   }
 
   public int executeStrategy(int num1, int num2){
      return strategy.doOperation(num1, num2);
   }
}

● 使用Context来改变策略,达到使用不同代码逻辑的作用

public class StrategyPatternDemo {
   public static void main(String[] args) {
      Context context = new Context(new OperationAdd());    
      System.out.println("10 + 5 = " + context.executeStrategy(10, 5));
 
      context = new Context(new OperationSubtract());      
      System.out.println("10 - 5 = " + context.executeStrategy(10, 5));
 
      context = new Context(new OperationMultiply());    
      System.out.println("10 * 5 = " + context.executeStrategy(10, 5));
   }
}

结果:

10 + 5 = 15
10 - 5 = 5
10 * 5 = 50

@HealUP HealUP added TOP work well 设计模式 置顶文章 and removed TOP work well labels Jul 6, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant