????????
??????????????ù????????????????????????????????????????????????????????????????????????????????????????????Э?????????????????????????У??????????ImageLoader????????ImageLoader??????????????????????????????????????????????????????????????????????????????????????????????????ó?????
????????
????????????????????????????????????????????????????????
??????ó???
????????????????????????????????????????????????????????????????????????????????????????????磬?????????????????????????????????IO???????????????????????????????
????UML???
????????????UML??????£?

????????????
????· Client?????????
????· Singleton????????
?????????????????????????????
????· ???????????????????private??
????· ???????????????????????????????
????· ?????????????????????????????????????????£?
????· ??????????????????л?????????1???????
??????????????????????????????????1???????????????????????
?????????
??????????????????????????????????????????????????ν?????????????????????????????????????????????????????????????ж????????????????????????????CEO??????????????Application??????
???????????????CEO????????????£????????????ж??VP?????????????????????CEO?????????£?
/**
*
* ??????
*
*/
public class Staff {
public void work() {
//???
}
}
//?????
public class VP extends Staff {
@Override
public void work() {
// ????????????
}
}
//CEO???????????
public class CEO extends Staff {
private static final CEO mCEO = new CEO();
private CEO() {
}
//???е????????????????????????????
public static CEO getCeo() {
return mCEO;
}
@Override
public void work() {
// ????VP
}
}
//?????
public class Company {
private List<Staff> mStaffs = new ArrayList<Staff>();
public void addStaff(Staff staff) {
mStaffs.add(staff);
}
public void showStaffs() {
for(Staff staff : mStaffs) {
System.out.println("Obj: " + staff.toString());
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Company company = new Company();
//CEO??????????getCeo???
Staff ceo1 = CEO.getCeo();
Staff ceo2 = CEO.getCeo();
company.addStaff(ceo1);
company.addStaff(ceo2);
Staff vp1 = new VP();
Staff vp2 = new VP();
company.addStaff(vp1);
company.addStaff(vp2);
Staff staff1 = new Staff();
Staff staff2 = new Staff();
company.addStaff(staff1);
company.addStaff(staff2);
company.showStaffs();
}
?????????????????£?
????Obj: com.liuguoquan.design.single.CEO@15db9742
????Obj: com.liuguoquan.design.single.CEO@15db9742
????Obj: com.liuguoquan.design.single.VP@6d06d69c
????Obj: com.liuguoquan.design.single.VP@7852e922
????Obj: com.liuguoquan.design.single.Staff@4e25154f
????Obj: com.liuguoquan.design.single.Staff@70dea4e
?????????????????????CEO???????new???????????????????CEO.getCeo()????????????????CEO??????????????????????????????????????????CEO????????
?????????????п????????CEO?????????CEO???????????????????????CEO??????VP??Staff?????????????????
?????????
?????????
????????????????????????????????????????????????????????????????????????????????С????????????????????????????????????????????????????£?
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {
}
public static Singleton getInstance() {
return instance;
}
}
?????????
???????????????????????????????????????ε???getInstance????г??????
public class Singleton {
private static Singleton instance = null;
private Singleton() {
}
public static Singleton getInstance() {
synchronized(Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
????getInstance???????????Synchronized??????????????synchronized?????????????飬????????????????????б???????????????Ρ????????????????????instance????????????ε???getInstance?????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????μ????????????????????????????????????????ε???geInstance????????????????????????????????????????????á?