单例模式介绍
在应用这个模式时,单例对象的类必须保证只有一个实例的存在。许多时候整个系统只需要一个全局对象。这样有利于我们协调系统整体的行为。
单例模式的定义
确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
单例模式的使用场景
确保某个类有且只有一个对象的场景,避免产生多个对象消耗过多的资源,或者某个类型的对象值应该有且只有一个。
UML类图
代码
Staff.java
public class Staff {
public void work(){
}
}
VP.java
public class VP extends Staff {
@Override
public void work(){
}
}
CEO.java
public class CEO extends Staff {
private static final CEO mCeo=new CEO();
private CEO(){
}
public static CEO getCeo(){
return mCeo;
}
@Override
public void work(){
}
}
Company.java
import java.util.ArrayList;
import java.util.List;
public class Company {
private List<Staff> allStaffs=new ArrayList<Staff>();
public void addStaff(Staff per){
allStaffs.add(per);
}
public void showAllStaffs(){
for(Staff per: allStaffs){
System.out.println("Obj : "+per.toString());
}
}
}
Test.java
public class Test {
public static void main(String[] args){
Company cp=new Company();
Staff ceo1=CEO.getCeo();
Staff ceo2=CEO.getCeo();
cp.addStaff(ceo1);
cp.addStaff(ceo2);
Staff vp1=new VP();
Staff vp2=new VP();
Staff staff1=new Staff();
Staff staff2=new Staff();
Staff staff3=new Staff();
cp.addStaff(vp1);
cp.addStaff(vp2);
cp.addStaff(staff1);
cp.addStaff(staff2);
cp.addStaff(staff3);
cp.showAllStaffs();
}
}
运行结果: