设计模式概述与UML 类图与知识概括

设计模式概述与UML 类图与知识概括

  • 设计模式概述
  • UML类图使用
  • UML 基本介绍
  • UML 图
  • UML 类图关系

设计模式概述

23种设计模式全面解析
设计模式层次:

  • 第 1 层: 刚开始学编程不久, 听说过什么是设计模式
  • 第 2 层: 有很长时间的编程经验, 自己写了很多代码, 其中用到了设计模式, 但是自己却不知道
  • 第 3 层: 学习过了设计模式, 发现自己已经在使用了, 并且发现了一些新的模式挺好用的
  • 第 4 层: 阅读了很多别人写的源码和框架, 在其中看到别人设计模式, 并且能够领会设计模式的精妙和带来的好处。
  • 第 5 层: 代码写着写着, 自己都没有意识到使用了设计模式, 并且熟练的写了出来。

设计模式介绍:

  • 设计模式是程序员在面对同类软件工程设计问题所总结出来的有用的经验, 模式不是代码, 而是某类问题的通用解决方案, 设计模式(Design pattern) 代表了最佳的实践。 这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
  • 设计模式的本质提高软件的维护性, 通用性和扩展性, 并降低软件的复杂度。
  • 《设计模式》是经典的书, 作者是 Erich Gamma、 Richard Helm、 Ralph Johnson 和 John Vlissides Design(俗称 “四人组 GOF” )
  • 设计模式并不局限于某种语言, java, php, c++ 都有设计模式。

设计模式类型:

  • 设计模式分为三种类型, 共 23 种
  • 创建型模式: 单例模式、 抽象工厂模式、 原型模式、 建造者模式、 工厂模式。
  • 结构型模式: 适配器模式、 桥接模式、 装饰模式、 组合模式、 外观模式、 享元模式、 代理模式。
  • 行为型模式: 模版方法模式、 命令模式、 访问者模式、 迭代器模式、 观察者模式、 中介者模式、 备忘录模式、解释器模式(Interpreter 模式) 、 状态模式、 策略模式、 职责链模式(责任链模式)。

UML类图使用

)
具体参数说明:
设计模式概述与UML 类图与知识概括_第1张图片

  • Note:对象UML 进行注释说明
  • Class:表示类,可以添加属性和方法
  • Interface:表示接口,可以添加抽象方法
  • Dependency:表示依赖(使用)(被箭头指向的类为被依赖对象)
  • Association:表示关联
  • Generalization:表示泛化(继承)
  • Realization:表示实现
  • Aggregation:表示聚合
  • Composite:表示组合

UML 基本介绍

  • UML——Unified modeling language UML(统一建模语言),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果。
  • UML本身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于描述软件模型中的各个元素和他们之间的关系,比如类、接口、实现、泛化、依赖、组合、聚合等,如下图
  • 使用UML来建模,常用的工具有 RationalRose , 也可以使用一些插件来建模
    设计模式概述与UML 类图与知识概括_第2张图片

UML 图

UML 图:

  • 画UML图与写文章差不多,都是把自己的思想描述给别人看,关键在于思路和条理,UML图分类:
    用例图(use case diagram):指由参与者(Actor)、用例(Use Case),边界以及它们之间的关系构成的用于描述系统功能的视图。
    设计模式概述与UML 类图与知识概括_第3张图片
    ②静态结构图: 类图(Class diagram)、对象图、包图、组件图、部署图
    <1>类图是显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的关系等,是UML图中最核心的。
    设计模式概述与UML 类图与知识概括_第4张图片
    ③动态行为图:交互图(时序图与协作图)(Sequence Diagram)、状态图、活动图(activity diagram)
    <1>时序图是一种UML交互图。它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。它可以表示用例的行为顺序,当执行一个用例行为时,其中的每条消息对应一个类操作或状态机中引起转换的触发事件。
    设计模式概述与UML 类图与知识概括_第5张图片
    <2>活动图:活动图表示在处理某个活动时,两个或者更多类对象之间的过程控制流。活动图可用于在业务单元的级别上对更高级别的业务过程进行建模,或者对低级别的内部类操作进行建模。根据我的经验,活动图最适合用于对较高级别的过程建模,比如公司当前在如何运作业务,或者业务如何运作等。这是因为与序列图相比,活动图在表示上"不够技术性的",但有业务头脑的人们往往能够更快速地理解它们。
    设计模式概述与UML 类图与知识概括_第6张图片

UML 类图:

  • 用于描述系统中的类(对象)本身的组成和类(对象)之间的各种静态关系。
  • 类之间的关系: 依赖、泛化(继承)、实现、关联、聚合与组合

类图简单举例:

  • 1、代码
public class Person {
      // 代码形式->类图
	private Integer id;
	private String name;

	public void setName(String name) {
     
		this.name = name;
	}

	public String getName() {
     
		return name;
	}
}
  • 2、类图设计模式概述与UML 类图与知识概括_第7张图片

UML 类图关系

UML箭头指向说明:

  • uml 中的依赖箭头指的对象是被引用对象。
  • 依赖谁就指向谁!
  • 形象记忆法:我依赖你=我喜欢你=我主动出击你才会知道=我把心形箭头射向你。

依赖关系(Dependence):

  • 只要是在类中用到了对方, 那么他们之间就存在依赖关系。 如果代码中没有对方, 连编绎都通过不了
  • 代码:
public class PersonServiceBean {
     
    private PersonDao personDao;//类
    
    public void save(Person person){
     }
    
    public IDCard getIDCard(Integer personid){
     
        return null;
    }
    
    public void modify(){
     
    	Department department = new Department();
    }
} 

public class PersonDao{
     }

public class IDCard{
     }

public class Person{
     }

public class Department{
     }

  • 类图(箭头):
    设计模式概述与UML 类图与知识概括_第8张图片
  • 依赖关系小结:类中用到了对方,他们就存在依赖关系
    ①类的成员属性
    ②方法的返回类型
    ③方法接收的参数类型
    ④方法中使用的局部变量

泛化关系(Generalization):

  • 泛化关系实际上就是继承关系,他是依赖关系的特例
  • 代码(空心三角形 + 实线):
public abstract class DaoSupport{
     
    public void save(Object entity){
     
        
    }
    
    public void delete(Object id){
     
        
    }
}

public class PersonServiceBean extends Daosupport{
     
    
}
  • 类图:设计模式概述与UML 类图与知识概括_第9张图片
  • 泛化关系小结:
    ①泛化关系实际上就是继承关系
    ②如果 A 类继承了 B 类, 我们就说 A 和 B 存在泛化关系

实现关系(Implementation):

  • 实现关系实际上就是 A 类实现 B 接口, 他是依赖关系的特例
  • 代码:
public interface PersonService {
     
	public void delete(Integer id);
} 

public class PersonServiceBean implements PersonService {
     
	public void delete(Integer id){
     
        
    }
}
  • 类图(空心三角形 + 虚线):设计模式概述与UML 类图与知识概括_第10张图片

关联关系(Association):

  • 关联关系实际上就是类与类之间的联系,他是依赖关系的特例
  • 关联具有导航性:即双向关系或单向关系
  • 关系具有多重性:如“1”(表示有且仅有一个),“0…”(表示0个或者多个),“0, 1”(表示0个或者一个),“n…m”(表示n到m个都可以),“m…*”(表示至少m个)
  • 代码:
// 单向一对一关系
public class Person {
     
	private IDCard card;
}

public class IDCard{
     
    
}


// 双向一对一关系
public class Person {
     
	private IDCard card;
}

public class IDCard{
     
	private Person person
}
  • 类图():
    设计模式概述与UML 类图与知识概括_第11张图片

聚合关系(Aggregation):

  • 聚合关系(Aggregation)表示的是整体和部分的关系,整体与部分可以分开。聚合关系是关联关系的特例,所以他具有关联的导航性与多重性。
  • 如:一台电脑由键盘(keyboard)、显示器(monitor),鼠标等组成;组成电脑的各个配件是可以从电脑上分离出来的,使用带空心菱形的实线来表示:
  • 代码:
public class Computer {
     
	private Mouse mouse; // 鼠标可以和Computer分离
	private Moniter moniter;// 显示器可以和Computer分离

	public void setMouse(Mouse mouse) {
     
		this.mouse = mouse;
	}

	public void setMoniter(Moniter moniter) {
     
		this.moniter = moniter;
	}

}
  • 类图(空心菱形 + 实线):设计模式概述与UML 类图与知识概括_第12张图片

组合关系(Aggregation):

  • 组合关系:也是整体与部分的关系,但是整体与部分不可以分开。
  • 在程序中我们定义实体: Person与IDCard、 Head,那么 Head 和Person 就是组合关系, IDCard 和
    Person 就是聚合关系。
  • 但是如果在程序中Person实体中定义了对IDCard进行级联删除,即删除Person时连同IDCard一起删除, 那么IDCard 和Person 就是组合了
  • 代码:
public class Person {
     
	private IDCard card; // 聚合关系
	private Head head = new Head(); // 组合关系
}
  • 类图:聚合(空心菱形 + 实线)、组合(实心菱形 + 实线):设计模式概述与UML 类图与知识概括_第13张图片
  • 如果聚合关系中的Mouse、Monitor和Computer是不可分离的,则升级为组合关系
public class Computer {
     
	private Mouse mouse = new Mouse(); // 鼠标可以和Computer不能分离
	private Moniter moniter = new Moniter();// 显示器可以和Computer不能分离

	public void setMouse(Mouse mouse) {
     
		this.mouse = mouse;
	}

	public void setMoniter(Moniter moniter) {
     
		this.moniter = moniter;
	}
}
  • 类图(实心菱形 + 实线):设计模式概述与UML 类图与知识概括_第14张图片

你可能感兴趣的:(设计模式,设计模式)