1 课程介绍
-
1.单例模式(掌握) 单: 一个 例:实例 模式:一种结构
-
2.代码块(了解) {}
-
3.组合关系(了解)
2 单例模式
2.1 什么是单例模式
1. 名词解释
单: 一个的意思
例:实例(对象)
模式 就是一种设计模式
需要设计一个类,达到的效果:
此类在整个应用中只存在一个对象(这一个对象可以被多个变量指向的—
开一个房间,给你们每人都配一把钥匙,但是房间只有一个,房间就是这个对象,这个钥匙相等于变量指向房间)
如何达到这样的效果:设计一个类,这个类的对象永远只有一个对象?
- 设计思路:
class A{}
① 对象怎么来的? new A(); new A(); new A(); …
调用一次构造方法就得到一个对象
② 把构造方法私有化,本类的外部就不能够随意的访问创建对象了(但是本类中是可以创建的)
③ 在内部创建好一个,并保存起来,别人需要对象给它一个地址
3.单例模式是一种创建型简单的设计模式
4,生活用途:
对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;售票时,一共有100张票,可有有多个窗口同时售票,但需要保证不要超售(这里的票数余量就是单例,售票涉及到多线程)。如果不是用机制对窗口对象进行唯一化将弹出多个窗口,如果这些窗口显示的都是相同的内容,重复创建就会浪费资源。
5.有多少种?
6种
思考 : 一个类的所有构造方法都被私有化,就不能够创建对象了,说法正确吗?
答案:不正确
2.2 饿汉模式(时间换空间)
分析:
1 单例模式的类也是一个普通的类,其中也可以有其他的字段 方法等。。。
2 上面代码中,A对象是A类被加载(把类放到JVM的过程中)的时候创建的
3 如果A类中其他的字段和方法很多。。。,创建对象的过程比较长,类加载会比较慢
有可能加载之后很长时间其实都没有人来获得对象
4
在类加载的时候先不创建对象,而是在有人第一次来调用方法获得对象的时候才创建一个对象 之后需要保存起来,以后再有人调用就不用创建对象
2.3 懒汉模式(空间换时间)
懒汉模式是调用这个方法的时候它才创建这个对象
懒汉模式存在线程安全问题(有可能拿到的对象不是同一个)
总结:
单例模式步骤
①构造方法私有化
②创建变量保存 对象private static
③提供一个方法 返回对象public static
3 代码块(了解)
3.1 什么是代码块
可以看成是一块代码,一般都是有 { };
看到{} 应该想到作用域问题;
也就是代码的访问范围:
比如:
这个j在{}外面是无法访问的
3.2 分类-局部代码块(普通代码块)
① 位置 : 主要是写在方法里面;
② 一般的在方法里面直接写{} 没有多大实际意义,结合 if for来写才有意义
3.3 分类-构造代码块
② 直接写在类中的代码块(没有static修饰);
③ 编译完毕之后会在每一个构造方法里面复制一份;
④ 创建一个对象(调用一次构造方法)就会执行一次
⑤ 可以给对象的实例字段初始化值(其实用得非常的少)
测试内容:
结果:
3.4 分类-静态代码块(有些时候还会用到)
① 直接写在类中的,有static修饰;
② 在类加载的时候执行和创建对象没有关系;
③ 优先于主方法的执行的(加载完之后,JVM才找主方法执行)
④ 可以在类加载的时候做已写初始化的操纵(在就业班前期,JDBC的)
4 组合关系(了解)
① 组合是(has-a)关系,而继承则是(is-a)关系;
② 组合关系在运行期决定,而继承关系在编译期就已经决定了。
③
组合是在组合类和被包含类之间的一种松耦合关系,而继承则是父类和子类之间的一种紧耦合关系。
④
当选择使用组合关系时,在组合类中包含了外部类的对象,组合类可以调用外部类必须的方法,而使用继承关系时,父类的所有方法和变量都被子类无条件继承,子类不能选择。
4.1组合介绍
4.2 组合关系
Card类表示手机卡:
手机CellPhone:
测试:
示意图分析:
两个类没啥关系,但是另一个类里面定义了前一个类,有了小小的关系。