Java基础学习第十二节——单例模式,组合关系

1 课程介绍

  • 1.单例模式(掌握) 单: 一个 例:实例 模式:一种结构

  • 2.代码块(了解) {}

  • 3.组合关系(了解)

2 单例模式

2.1 什么是单例模式

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:

在这里插入图片描述

测试:

在这里插入图片描述

示意图分析:

在这里插入图片描述

两个类没啥关系,但是另一个类里面定义了前一个类,有了小小的关系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值