java设计模式之单例设计模式和多例设计模式

单例设计模式:构造方法私有化,在类的内部定义static属性和方法,利用static方法来取得本类的实例化对象;无论外部产生多少个实例化对象,本质上只有一个实例化对象

饿汉式单例设计

复制代码
class Singleton{
    private static final Singleton INSTANCE = new Singleton();//产生一个实例化对象
    private Singleton(){}//封装构造方法
    public static Singleton getInstance(){
        return INSTANCE;//取得实例化对象
    }
    public void print(){
        System.out.print("hello word");
    }
}
public class Test{
    public static void main(String args[]){
        Singleton s = Singleton.getInstance();//无论调用多少次getInstance()方法,产生的实例化对象都是相同的
        s.print();
    }
}
复制代码

懒汉式设计模式

复制代码
class Singleton{
    private static final Singleton INSTANCE;//定义一个未实例化的本类对象
    private Singleton(){}//封装构造方法
    public static Singleton getInstance(){
        if(INSTANCE == null){  
            INSTANCE = new Singleton();
        }
        return INSTANCE;//取得实例化对象
    }
    public void print(){
        System.out.print("hello word");
    }
}
public class Test{
    public static void main(String args[]){
        Singleton s = Singleton.getInstance();//无论调用多少次getInstance()方法,产生的实例化对象都是相同的
        s.print();
    }
}
复制代码

多例设计模式:构造方法私有化,产生特定个数对象

复制代码
class Sex{
    private String sex;
    private static final Sex MAN = new Sex("男");
    private static final Sex WOMAN = new Sex("女");
    private Sex(String sex){
        this.sex = sex;
    }
    public static Sex getInstance(int ch){
        switch(ch){
            case 1:
                return MAN;
            case 2:
                return WOMAN;
            default:
                return null;
        }
    }
    public String toString(){
        return sex;
    }
}
public class Test{
    public static void main(String args[]){
        Sex s = Sex.getInstance(1);
        System.out.println(s);
    }
}
复制代码

 

posted @   小洋编程  阅读(248)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示