单例设计模式和多例设计模式
1、单例设计模式:类仅能实例化一次,保留一个实例化
2、饿汉设计:在程序代码一开始就给Singleton实例化
package day05;
/*
* 创建时间:2018年7月12日 上午12:14:53
* 项目名称:studyJava
* @author 飞鱼
* @version 1.0
* @since JDK 1.8.0_151
* 文件名称:Singleton.java
* 类说明: 饿汉单例设计模式
*/
class Singleton{ private static final Singleton SINGLETON= new Singleton(); public static Singleton getInstance() { return SINGLETON; } }
public class javaDamo5 { public static void main(String[] args) { Singleton singleton=Singleton.getInstance(); Singleton singleton2=Singleton.getInstance(); System.out.println(singleton==singleton2); } }
|
3、懒汉设计:在程序代码需要Singleton实例化时才给Singleton实例化
package day05;
/*
* 创建时间:2018年7月12日 上午12:14:53
* 项目名称:studyJava
* @author 飞鱼
* @version 1.0
* @since JDK 1.8.0_151
* 文件名称:Singleton.java
* 类说明: 懒汉单例设计模式
*/
class Singleton{ private static Singleton singleton=null ; public static Singleton getInstance() { if (singleton==null) { singleton=new Singleton(); } return singleton; } }
public class javaDamo5 { public static void main(String[] args) { Singleton singleton=Singleton.getInstance(); Singleton singleton2=Singleton.getInstance(); System.out.println(singleton==singleton2); } }
|
4、多例设计模式:仅可以实例化有限个类,保留多个实现类
package day05;
/*
* 创建时间:2018年7月12日 上午12:23:36
* 项目名称:studyJava
* @author 飞鱼
* @version 1.0
* @since JDK 1.8.0_151
* 文件名称:javaDamo6.java
* 类说明: 多例设计模式
*/
class Color{ private String color; private Color(String color) { this.color=color; } private static final Color RED=new Color("红色"); private static final Color GREEN=new Color("绿色"); private static final Color BLUE=new Color("蓝色"); public static Color getIncetance(String color) { switch (color) { case "RED": return RED; case "GREEN": return GREEN; case "BLUE": return BLUE; default: return null; } } public String getColor() { return color; } public void setColor(String color) { this.color = color; } }
public class javaDamo6 { public static void main(String[] args) { Color colorA=Color.getIncetance("GREEN"); Color colorB=Color.getIncetance("RED"); Color colorC=Color.getIncetance("BLUE"); Color colorD=Color.getIncetance("B"); Color colorE=new Color("黄色"); //出错,构造方法不允许访问 System.out.println(colorA.getColor()); System.out.println(colorB.getColor()); System.out.println(colorC.getColor()); System.out.println(colorD.getColor()); //java.lang.NullPointerException } }
|