单例模式简介
单例设计模式,就是采取一定的方法保证整个的软件系统中,对某个类只能存在一个对象实例,并且类只提供一个取得对象实例的方法(静态方法)。
单例模式有八种方式:
- 饿汉式(静态常量)
- 饿汉式(静态代码块)
- 懒汉式(线程不安全)
- 懒汉式(线程安全,同步方法)
- 懒汉式(线程安全,同步代码块)
- 双重检查
- 静态内部类
- 枚举
我们要给别人讲解一个问题的时候,最直观的方法莫过于用图形的方式去讲解,而不是枯燥的文字。毕竟我们还是个孩子的时候,图画更能给我们带来触动,而文字我们因为一些认知的问题会导致一些理解能力上的偏差。设计模式里面的UML类图就是可以让你给别人讲解设计理念的时候,不用再是枯燥的代码和文字,而是直接给别人用类图的形式来表达的一种方式。
为了方便大家了解,我会给出对应的类图,以及对应的代码实现,让大家有个初步的概念,方便大家来学习设计模式这枯燥的东西。
我们常见的几种关系:泛化(Generalization)、实现(Realization)、关联(Association)、聚合(Aggregation)、组合(Composition),依赖(Dependency)。
前面我们已经演示了一对一,一对多,多对多的关系这三种是日常工作中很常见的关联关系,我们会介绍更加复杂的关联关系,分别是远层一对多和多态关联。
远层一对多在一对多关联的基础上加上了一个修饰词【远层】,意味着这个一对多关系不是直接关联,而是【远层】关联,远层关联需要借助中间表,前面我们讨论多对多关联也是借助中间表,但是远层一对多与其区别在于还是一对多的关联。
理论和实例结合才容易理解。如果博客系统是针对全球市场的话,可能针对不同的国家推出不同的用户系统和功能,然后中国用户过来就只展示中国用户发布的文章,日本用户过来就只展示日本用户发表的文章,这里就涉及了三张表,存储国家的 countries
表,存储用户的 users
表以及存储文章的 posts
表。
用户与文章是一对多的关联关系,国家与用户之间是一对多的关联(一个用户只能有一个国际),那么通过用户这张中间表,国家和文章之间也建立起来一对多的关联,只是这个关联不是直接的关联,而是【远层】的关联。
针对这个情况,我们说国家和文章之间是远层的一对多关联。
我们在实际开发中是不仅仅针对一张表,而是两张或者多张表联动的操作,这里我们经常面对的关系就是一对一,一对多,多对一,多对多等等。
这里我们搭建环境,我们看看最常见的数据关系,学生和老师的关系
1 | create table teachers ( |
2 | `id` int(20) not null auto_increment, |
3 | `name` varchar(64) not null, |
4 | PRIMARY KEY (`id`) |
5 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; |
6 | |
7 | insert into teachers (`name`) values ('燕子李三'); |
8 | |
9 | create table students ( |
10 | `id` int(20) not null auto_increment, |
11 | `name` varchar(64) not null, |
12 | `tid` int(20) not null, |
13 | PRIMARY KEY (`id`) |
14 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; |
15 | |
16 | insert into students (`name`, `tid`) values ('张三', 1), ('李四', 1), ('王五', 1), ('赵六', 1); |
我们导入数据库,然后开始创建项目。