单例模式以及枚举

单例模式以及枚举的异同

相同点:同样是类中有固定的对象个数
不同点:单例模式只有一个对象,枚举是有限个对象,但对象只有一个时,也可以叫做单例模式

单例模式实现

单例模式有七种实现方式,但本质上是让让类只能创建一个对象,为了保证这个,只能在类内部创建对象,而在类外部外部无法创建,所以构造器是空的
给出两种实现方式:

//饿汉式:提前创建好对象
class Single{
	private Single(){
		
	}
	private static Single instance=new Single();//构造器必须私有
	public static Single getInstance() {
		return instance;
	}
}

//懒汉式:调用时才创建
class Single2{
	private static Single2 instance=null;//构造器必须私有
	private Single2() {
		
	}
	
	public static Single2 getInstance() {
		if(instance==null) {
			instance=new Single2();
		}
		return instance;
	}
}

枚举

自定义枚举

  • 构造器私有化
  • 在类内部创建的实例是 public static final
  • 若类有属性,那么属性声明为:private final ,此属性在构造器中赋值。
  • 先来一个最简单的版本
enum Seasons {
	SPRING,//创建四个实例,注意是逗号,
	SUMMER,
	AUTMN,
	WINTER;
	/*private Seasons(){
		
	}*/
}

枚举类如何实现接口 :①让类实现此接口,类的对象共享同一套接口的抽象方法的实现。
①让类的每一个对象都去实现接口的抽象方法,进而通过类的对象调用被重写的抽象方法时,执行的效果不同

interface Info{
	void show();
}
enum Seasons implements Info {
	SPRING("春天","万象初新"){
		public void show() {
			System.out.println("风乍起,吹皱一池春水");
		};
	},//创建四个实例,注意是逗号,
	SUMMER("夏天","生如夏花"){
		public void show() {
			System.out.println("接天莲叶无穷碧,映日荷花别样红");
		}
	},
	AUTMN("秋天","秋高气爽"){
		public void show () {
			System.out.println("人生若只如初见,何事秋风悲画扇");
		}
	},
	WINTER("冬天","冬日可爱"){
		public void show () {
			System.out.println("忽如一夜春风来,千树万树梨花开");
		}
	};
	private  final String seasonName;
	private  final String seasonDesc;
	private Seasons(String seasonName, String seasonDesc) {
		this.seasonName = seasonName;
		this.seasonDesc = seasonDesc;
	}
	public String getSeasonName() {
		return seasonName;
	}
	public String getSeasonDesc() {
		return seasonDesc;
	}
	@Override
	public void show() {
		// TODO Auto-generated method stub
		System.out.println("春夏秋冬");
	}
	@Override
	public String toString() {
		return "Season [seasonName=" + seasonName + ", seasonDesc=" + seasonDesc + "]";
	}

}

调用方式

public static void main(String[] args) {
		Season spring =Season.SPRING;
		System.out.println(spring);
		System.out.println(spring.getSeasonName());
		System.out.println();
		//1.values()
		Season[] seasons=Season.values();
		for (int i = 0; i < seasons.length; i++) {
			System.out.println(seasons[i]);
		}
		//valueOf(String):要求是形参的名字
		System.out.println(Season.valueOf("SPRING"));
	}

输出
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值