单例设计模式

2020-11-09  本文已影响0人  曾梦想仗剑天涯

单例设计

package demo;
class Singleton {
  public void print() {
    System.out.println("www.baidu.com");
  }
}
public class JavaDemo {
  public static void main(String [] args) {
    Singleton instanceA = new Singleton();
    Singleton instanceB = new Singleton();
    Singleton instanceC = new Singleton();
    instanceA.print();
    instanceB.print();
    instanceC.print();
  }
}
//构造方法私有化
package demo;
class Singleton {
  private Singleton() {}    //构造方法私有化
  public void print() {
    System.out.println("www.baidu.com");
  }
}
public class JavaDemo {
  public static void main(String [] args) {
    Singleton instance = null;   //声明对象
    /**
      声明对象时没有问题,但是实例化对象报错了,因为私有化了构造方法
    */
    instance = new Singleton();   //实例化对象
  }
}
package demo;
class Singleton {
  private static final Singleton INSTANCCE = new Singleton();
  private Singleton() {}    //构造方法私有化
  public static Singleton getInstance() {
    return INSTANCCE;
  }
  public void print() {
    System.out.println("www.baidu.com");
  }
}
public class JavaDemo {
  public static void main(String [] args) {
    Singleton instance = null;   //声明对象
    instance = Singleton.getInstance();   //实例化对象
    instance.print();
  }
}
//将单例修改为懒汉式
package demo;
class Singleton {
  private static Singleton instance;
  private Singleton() {}    //构造方法私有化
  public static Singleton getInstance() {
    if(instance == null) {    //第一次使用
      instance = new Singleton();    //实例化对象
    }
    return instance;
  }
  public void print() {
    System.out.println("www.baidu.com");
  }
}
public class JavaDemo {
  public static void main(String [] args) {
    Singleton instance = null;   //声明对象
    instance = Singleton.getInstance();   //实例化对象
    instance.print();
  }
}

多例设计

//例如现在描述一个表示性别的类,那么该对象只有两个:男、女
//描述颜色基色的类,可以使用:红色、绿色、蓝色
//这些情况就可以利用多例设计来解决
package demo;
class Color {   //定义描述颜色的类
  private static final Color RED = new Color("红色");
  private static final Color GREEN = new Color("绿色");
  private static final Color BLUE = new Color("蓝色");
  private String title;
  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;
    }
  }
  public String toString() {
    return this.title;
  }
}
public class JavaDemo {
  public static void main(String [] args) {
    Color c = Color.getInstance("green");
    System.out.println(c);
  }
}
上一篇 下一篇

猜你喜欢

热点阅读