没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
一、单例设计模式
(1) 设计模式概述
(2) 何为单例模式
(3) 实现思路
(4) 单例模式的两种实现方式
1. 饿汉式
2. 懒汉式
3. 饿汉式 vs 懒汉式
(5) 单例模式的优点及应用场景
二、理解main方法的语法
(1)main()方法的剖析
(2)与控制台交互
1.举例1
1.1 方式一、命令行
1.2 方法二、编译器
2.举例2
(3)笔试题
一、单例设计模式
(1) 设计模式概述
设计模式是在大量的 实践中总结 和 理论化 之后优选的代码结构、编程风格、以及解决问题的思考方
式。
设计模式免去我们自己再思考和摸索。就像是经典的棋谱,不同的棋局,我们用不同的棋谱。"套
路"
经典的设计模式共有23种。每个设计模式均是特定环境下特定问题的处理方法。
创建型模式:主要用于创建对象,根据不同场景设计不同的设计模式。
简单工厂模式并不是23中经典模式的一种,是其中工厂方法模式的简化版
对软件设计模式的研究造就了一本可能是面向对象设计方面最有影响的书籍:《设计模式》:
《Design Patterns: Elements of Reusable Object-Oriented Software》(即后述《设计模式》
一书),由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合著(Addison-
Wesley,1995)。这几位作者常被称为"四人组(Gang of Four)",而这本书也就被称为"四人组
(或 GoF)"书。
(2) 何为单例模式
单例--单独一个实例(对象)
所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对
象实例(不需要多个对象),并且该类只提供一个取得其对象实例的方法。
(3) 实现思路
如果我们要让类在一个虚拟机中只能产生一个对象,我们首先必须将 类的构造器的访问权限设置为
private ,这样,就不能用new操作符在类的外部产生类的对象了,但在类内部仍可以产生该类的对
象。
因为在类的外部开始还无法得到类的对象, 只能调用该类的某个静态方法 (方法不能是非静态的,因
为非静态方法要通过对象去调用,
此时外部无法创建对象来调用方法,只能通过类调用静态方法)以返回类内部创建的对象,静态方
法只能访问类中的静态成员变量,所以,指向类内部产生的 该类对象的变量也必须定义成静态的 。
(4) 单例模式的两种实现方式
1. 饿汉式
【举例】
场景:假设Bank只有一个实例。
①类的构造器私有化 (避免类的外部创建对象)
为了保证这个类只能造一个对象,而造对象需要使用到构造器,那么在这个类外面就不能让它随便
调用构造器。
②在类的内部创建当前类的实例 (一个就可以了)
class Singleton {
// 1.私有化构造器
private Singleton() {
}
// 2.内部提供一个当前类的实例
// 4.此实例也必须静态化
private static Singleton single = new Singleton();
// 3.提供公共的静态的方法,返回当前类的对象
public static Singleton getInstance() {
return single;
}
}
package yuyi04;
public class BankTest {
}
class Bank{ //假设这个银行只有一个实例:中国人民银行
}
class Bank{ //假设这个银行只有一个实例:中国人民银行
//1.类的构造器私有化 (避免类的外部创建对象)
//为了保证这个类只能造一个对象,而造对象需要使用到构造器,那么在这个类外面就不能让它随便调用
构造器
private Bank(){ //构造器私有化,不对外暴露
}
}
③提供私有属性的get方法
类的外部想用这个对象,但是对象被私有化了,外部无法调用,所以要有方法提供
使用getXxx()方法获取当前类的实例,必须声明为static的。
通过方法返回当前类的实例,那么这个getInstance方法谁来调呢?
现在只能拿“对象”来调用这个方法,才能拿到getInstance方法来获取此对象。(此时在类外部需要一
个对象,但是无法通过构造器来创建,只能通过getInstance方法来获取一个对象,但是这个方法也需要
通过对象才能调用,而对象需要通过这个方法来获取,绕进去了...)
要想调用getInstance方法来获取对象,肯定不能拿对象去调用,只能通过类来调用,那就意味着
getInstance方法需要静态化。
class Bank{ //假设这个银行只有一个实例:中国人民银行
//1.类的构造器私有化 (避免类的外部创建对象)
//为了保证这个类只能造一个对象,而造对象需要使用到构造器,那么在这个类外面就不能让它随便调用
构造器
private Bank(){ //构造器私有化,不对外暴露
}
//2.在类的内部创建当前类的实例 (一个就可以了)
private Bank instance=new Bank(); //可以看作当前类的一个属性 (是当前类类型的),不
需要放到方法里面,习惯将它私有化
}
class Bank{ //假设这个银行只有一个实例:中国人民银行
//1.类的构造器私有化 (避免类的外部创建对象)
//为了保证这个类只能造一个对象,而造对象需要使用到构造器,那么在这个类外面就不能让它随便调用
构造器
private Bank(){ //构造器私有化,不对外暴露
}
//2.在类的内部创建当前类的实例 (一个就可以了)
private Bank instance=new Bank(); //可以看作当前类的一个属性 (是当前类类型的),不
需要放到方法里面,习惯将它私有化
//3.提供私有属性的get方法
//类的外部想用这个对象,但是对象被私有化了,外部无法调用,所以要有方法提供
public Bank getInstance(){
return instance; //在方法里面,将造好的对象返回
}
}
④属性设置为static
上一步将方法声明为static之后,会发现报错,如下:
这是因为静态方法中,只能调用静态属性或方法。
所以 instance 也必须静态化,如下:
目前整体的Bank类如下:
public static Bank getInstance(){
return instance; //在方法里面,将造好的对象返回
}
private static Bank instance=new Bank();
class Bank{ //假设这个银行只有一个实例:中国人民银行
//1.类的构造器私有化 (避免类的外部创建对象)
//为了保证这个类只能造一个对象,而造对象需要使用到构造器,那么在这个类外面就不能让它随便调用
构造器
private Bank(){ //构造器私有化,不对外暴露
}
//2.在类的内部创建当前类的实例 (一个就可以了)
//4.此属性也必须声明为static的
private static Bank instance=new Bank(); //可以看作当前类的一个属性 (是当前类类型
的),不需要放到方法里面,习惯将它私有化
//3.使用getXxx()方法获取当前类的实例,必须声明为static的
//类的外部想用这个对象,但是对象被私有化了,外部无法调用,所以要有方法提供
public static Bank getInstance(){
return instance; //在方法里面,将造好的对象返回
}
剩余22页未读,继续阅读
资源评论
雨翼轻尘
- 粉丝: 6w+
- 资源: 130
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- YOLOV4-TINY权重文件
- 以下是一个使用贪心算法解决多机调度问题的基本步骤0.txt
- 基于大数据的房产估价是近年来随着技术的发展而兴起的一种新型估价方法.txt
- 企业供应链管理系统v3.rar
- 富芮坤FR8016HA蓝牙开发板使用手册+硬件PCB图+封装库+DEMO演示软件源代码.zip
- 基于YOLOv7的芯片表面缺陷检测系统
- 京东物流 数字化供应链综合研究报告2018.rar
- 基于YOLOv7的植物虫害识别&防治系统
- 2000.1-2023.8中国经济政策不确定性指数月度数据.xlsx
- Screenshot_2024-04-21-20-42-15-443_com.tencent.mm.jpg
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功