Java学习路线-9:多例设计与枚举类
2023-09-14 09:07:12 时间
第25 章 : 单例设计模式
110 单例设计
单例设计模式:只允许提供一个实例对象
- 饿汉式:系统加载就实例化
- 懒汉式:第一次使用的时候实例化
多例设计模式
单例模式特点:
构造方法私有化,内部提供static方法获取实例化对象
饿汉式单例模式
class Singleton{
private static Singleton singleton = new Singleton();
// 构造函数私有化
private Singleton(){};
public static Singleton getInstance(){
return singleton ;
}
}
class Demo{
public static void main(String[] args) {
Singleton singleton = Singleton.getInstance();
}
}
懒汉式单例模式
class Singleton{
private static Singleton singleton ;
// 构造函数私有化
private Singleton(){};
public static Singleton getInstance(){
// 第一次使用实例化
if (singleton == null){
singleton = new Singleton();
}
return singleton ;
}
}
111 多例设计
class Color{
private String title;
private static final Color RED = new Color("红色");
private static final Color GREEN = new Color("绿色");
private static final Color BLUE = new Color("蓝色");
private Color(String title){
this.title = title ;
};
public static Color getInstance(String color){
switch(color){
case "red" : return RED;
case "green" : return GREEN;
case "blue" : return BLUE;
default: return null;
}
}
@Override
public String toString(){
return this.title;
}
}
class Demo{
public static void main(String[] args) {
Color red = Color.getInstance("red") ;
System.out.println(red);
}
}
单例和多例都会提供一个静态获取实例化的方法
第26 章 : 枚举
112 定义枚举类
JDK >= 1.5
枚举主要用于定义有限个数对象的一种结构(多例设计)
枚举可以在程序编译时判断实例化对象是否存在
enum Color{
RED,
GREEN,
BLUE
}
class Demo{
public static void main(String[] args) {
for(Color color : Color.values()){
System.out.println(color);
}
// RED GREEN BLUE
}
}
switch中对枚举类判断
enum Color{
RED,
GREEN,
BLUE
}
class Demo{
public static void main(String[] args) {
Color color = Color.RED ;
switch(color){
case RED :
System.out.println("红色");
break;
case GREEN :
System.out.println("绿色");
break;
case BLUE :
System.out.println("蓝色");
break;
default :
System.out.println("default");
}
// 红色
}
}
113 Enum类
枚举本质是一个类
枚举中每一个对象序号都是根据枚举对象的定义顺序来决定的
enum Color{
RED,
GREEN,
BLUE
}
class Demo{
public static void main(String[] args) {
for(Color color : Color.values()){
System.out.println(color.ordinal() + " - " + color.name());
}
/**
0 - RED
1 - GREEN
2 - BLUE
*/
}
}
enum和Enum区别
enum 是JDK 1.5之后提供的关键字,定义枚举类
Enum 是一个抽象类,关键字enum定义的类默认继承此类
114 定义枚举结构
枚举类本身属于多例设计模式
在枚举类中定义其他结构
// 枚举类
enum Color{
// 枚举对象要写在首行
RED("红色"), GREEN("绿色"), BLUE("蓝色") ;
// 定义属性
private String title ;
private Color(String title){
this.title = title ;
}
@Override
public String toString(){
return this.title ;
}
}
class Demo{
public static void main(String[] args) {
for(Color color : Color.values()){
System.out.println(color.ordinal() + " - " + color.name() + " - " + color);
}
/**
0 - RED - 红色
1 - GREEN - 绿色
2 - BLUE - 蓝色
*/
}
}
枚举类中可以实现接口继承
interface Imessage{
public String getMessage();
}
enum Color implements Imessage{
RED("红色"), GREEN("绿色"), BLUE("蓝色") ;
private String title ;
private Color(String title){
this.title = title ;
}
@Override
public String toString(){
return this.title ;
}
public String getMessage(){
return this.title ;
}
}
class Demo{
public static void main(String[] args) {
Imessage message = Color.RED ;
System.out.println(message.getMessage());
// 红色
}
}
枚举类可以直接定义抽象方法,
并且要求每一个枚举对象都要独立覆写此抽象方法
enum Color{
RED("红色"){
public String getMessage(){
return this.toString();
}
},
GREEN("绿色"){
public String getMessage(){
return this.toString();
}
},
BLUE("蓝色"){
public String getMessage(){
return this.toString();
}
} ;
private String title ;
private Color(String title){
this.title = title ;
}
@Override
public String toString(){
return this.title ;
}
public abstract String getMessage() ;
}
class Demo{
public static void main(String[] args) {
System.out.println(Color.RED.getMessage());
// 红色
}
}
枚举类不建议写太多内容
115 枚举应用案例
enum Sex{
MAN("男"), FEMALE("女") ;
private String title;
private Sex(String title){
this.title = title ;
}
@Override
public String toString(){
return this.title ;
}
}
class Person{
private String name ;
private int age ;
private Sex sex ;
public Person(String name, int age, Sex sex){
this.name = name ;
this.age = age ;
this.sex = sex ;
}
@Override
public String toString(){
return "Person(" + this.name + " " + this.age + " " + this.sex + ")";
}
}
class Demo{
public static void main(String[] args) {
Person person = new Person("张三", 23, Sex.MAN);
System.out.println(person);
// Person(张三 23 男)
}
}
相关文章
- java sortedset用法_Java SortedSet headSet()用法及代码示例[通俗易懂]
- Java实现大整数乘法
- java简单的除法运算_Java除法运算的陷阱[通俗易懂]
- 学java用什么编译器_学习Java用什么编译软件好
- java冒泡排序概练_Java的冒泡排序[通俗易懂]
- java集合类面试题_Java集合类相关面试题
- java后端开发需要什么_从事Java后端开发,要学习哪些知识和技能?[通俗易懂]
- java启动器_JAVA基础:Java 启动器如何查找类
- java motherfree video_Java Config 下的Spring Test方式
- c++和java哪个好学_c++语言和Java语言,初学者该如何选择?「建议收藏」
- 在线学习Java的几个网站,别再盲目学习java了![通俗易懂]
- java后端开发需要学什么_从事Java后端开发,要学习哪些知识和技能?[通俗易懂]
- Java NIO与IO的区别
- Java创建WebService服务及客户端实现
- java 随机数算法_Java随机数算法原理与实现方法实例详解
- 用java实现笛卡尔积_Java实现笛卡尔积
- java验证手机号正则表达式_Java使用正则表达式验证手机号和电话号码的方法「建议收藏」
- java -jar 中没有主清单属性_idea中jar包已经导入但是还是报错
- Java 中 String 相关问题
- Java 基础学习(3)
- java和vue开发的二手车小程序系统租车小程序系统
- Java枚举和注解
- Java使用iText生成PDF文件详解编程语言
- Java 文件操作工具类详解编程语言
- Java学习笔记之九java二维数组及其多维数组的内存应用拓展延伸详解编程语言
- Java学习笔记之一java关键字及作用详解编程语言
- java学习笔记03–判断与循环语句详解编程语言
- 开发者眼中的Spring与Java EE详解编程语言
- 学习如何使用Linux环境运行Java程序(linux下的java)
- Linux下Java开发入门指南(linux下java开发)
- 实现使用Java实现Redis消息队列(redis消息队列java)
- 程序Linux命令调用Java程序实现交互(linux命令java)
- 深入学习:Linux下Java环境建设与配置(linux下java环境)
- Linux下运行Java:一步步踏上学习之路(linux下运行java)
- Java数据库之MySQL学习使用教程(mysql中java教程)
- 一起学习Java的Oracle包(java的oracle包)
- Java加速Oracle开发之旅(java中oracle包)