久染

导航

Java day14【第二十五章】单例设计模式

【第二十五章】单例设计模式

一.单例设计模式

  在一个类中提供一个方法,由于某种需求,只允许提供一个实例化对象

class Singleton
{
    private static final Singleton INSTANCE = new Singleton();
    private Singleton(){}
    public static Singleton getInstance(){
        return INSTANCE;
    }
    public void print(){
        System.out.println("www.mldn.com");
    }
}

public class Message{
    public static void main(String args[]){
        Singleton instance = null ;
        instance = Singleton.getInstance();
        instance.print();
    }
}

  为什么要强调单例呢,在很多情况下,有些类是不需要重复产生对象的,例如:如果一个程序启动,那么现在肯定需要有一个类负责保存有一些程序加载的数据信息。

 

   例如在Windows中只有一个单例设计模式。

  对于单例设计模式分为俩种模式:懒汉式、饿汉式。在之前定义的都是饿汉式。

    饿汉式:在系统加载类的时候就会自动提供有Singleton类的实例化对象。

    懒汉式:在第一次使用的使用进行实例化处理。

范例:将单例修改为懒汉式

class Singleton
{
    private static Singleton instance;
    private Singleton(){}
    public static Singleton getInstance(){
        if (instance == null) return new Singleton();
        return instance;
    }
    public void print(){
        System.out.println("www.mldn.com");
    }
}

public class Message{
    public static void main(String args[]){
        Singleton instance = null ;
        instance = Singleton.getInstance();
        instance.print();
    }
}

 

二.多例设计模式

  多例设计指可以保留多个实例化对象。例如:描述性别:男女

范例:描述颜色三基色:

class Color
{
    private static final Color RED = new Color("红色");
    private static final Color BLUE = new Color("蓝色");
    private static final Color GREEN = new Color("绿色");
    private String color;
    private Color(String color){
        this.color = color;        
    }
    public static Color getInstance(String color){
        switch(color){
            case"RED":return RED;
            case"BLUE":return BLUE;
            case"GREEN":return GREEN;
            default:return null;
        }
    }
    public String toString(){
        return this.color;
    }
}

public class Message{
    public static void main(String args[]){
        Color c = Color.getInstance("RED");
        System.out.println(c.toString());
    }
}

  多例设计与单例设计的本质是相同的,一定都会在内部提供static方法以返回实例化对象。

 

  

posted on 2019-10-28 11:40  久染  阅读(134)  评论(0编辑  收藏  举报