单例设计:

在很多情况下有些类是不需要重复产生对象的。例如:Windows回收站。全局共享同一个回收站程序。
特点:构造方法私有化。类内部提供static方法获取实例化对象。

  1. class Singleton{
  2. private static final Singleton INSTANCE = new Singleton();
  3. private Singleton() {}
  4. public static Singleton getIntance() {
  5. return INSTANCE;
  6. }
  7. public void print() {
  8. System.out.println("test");
  9. }
  10. }
  11. public class FirstJava {
  12. public static void main(String[] args) {
  13. Singleton st = Singleton.getIntance();
  14. st.print();
  15. }
  16. }

单例模式分类两种,一种是在系统加载Singleton类的时候自动提供实例化对象(如上),另一种是在第一次使用的时候进行实例化对象处理(如下)。

  1. class Singleton{
  2. private static Singleton INSTANCE;
  3. private Singleton() {}
  4. public static Singleton getIntance() {
  5. if(INSTANCE == null){
  6. instance = new Singleton();
  7. }
  8. return INSTANCE;
  9. }
  10. public void print() {
  11. System.out.println("test");
  12. }
  13. }
  14. public class FirstJava {
  15. public static void main(String[] args) {
  16. Singleton st = Singleton.getIntance();
  17. st.print();
  18. }
  19. }

多例设计

与单例设计对应,单例设计指的是只保留一个实例化对象,多例设计设计可以保留多个实例化对象。
例如:如果定义一个描述性别的类,对象只有两个,男/女。

  1. class Gender{
  2. private String title;
  3. private static final Gender male = new Gender("男");
  4. private static final Gender female = new Gender("女");
  5. private Gender(String title) {
  6. this.title = title;
  7. }
  8. public static Gender getGender(String title) {
  9. switch(title) {
  10. case "male":return male;
  11. case "female":return female;
  12. default:return null;
  13. }
  14. }
  15. public void print() {
  16. System.out.println(title);
  17. }
  18. }
  19. public class FirstJava {
  20. public static void main(String[] args) {
  21. Gender g = Gender.getGender("male");
  22. g.print();
  23. }
  24. }

多例设计与单例设计本质相同。