zoukankan      html  css  js  c++  java
  • 简易的设计模式——单例模式

    定义

    单例模式是一种保证一个类中只有一个实例对象的软件设计模式。它需要确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

    这个还是比较好理解的,一个国家只能有一个国王,不可以出现第二个,所有的人都只能来膜拜这个伟大的国王。

    下面直接上代码。

    实现

    国王类

    public class King {
        //确保只有一个国王
        private static final King king=new King();
        //保证不再产生新的国王了
        private King(){}
        //这个国家的人通过getInstance()方法拜见他们的国王
        public static King getInstance(){
            return king;
        }
    }

    人民类

    public class People {
        //拜见国王
        public void visitKing(){
            System.out.println(King.getInstance());
        }
    }

    测试类

    public class SingletonTest {
        public static void main(String args[]){
            for(int i=0;i<10;i++){
                //让10个屁民拜见国王
                People people=new People();
                System.out.println(people);
                people.visitKing();
            }
        }
    }

    输出的结果

    design.Singleton.People@165e6c89
    design.Singleton.King@46c6c084
    design.Singleton.People@22893e69
    design.Singleton.King@46c6c084
    design.Singleton.People@60607135
    design.Singleton.King@46c6c084
    design.Singleton.People@5ba88001
    design.Singleton.King@46c6c084
    design.Singleton.People@136bf0aa
    design.Singleton.King@46c6c084
    design.Singleton.People@138532dc
    design.Singleton.King@46c6c084
    design.Singleton.People@dce1387
    design.Singleton.King@46c6c084
    design.Singleton.People@54640b25
    design.Singleton.King@46c6c084
    design.Singleton.People@7417d56b
    design.Singleton.King@46c6c084
    design.Singleton.People@48bc9f58
    design.Singleton.King@46c6c084

    这里可以看出来屁民对象一直在变,但是国王一直都是那个国王对象。这就是单例模式了。

    优点

    · 单例模式只有一个实例,可以节约内存,对于一个对象需要频繁创建、消除时,单例模式无疑是最好的选择。

    · 由于只有一个实例对象,可以避免对同一个资源的多重占用。

     

    缺点

    · 单例模式一般没有接口,不易扩展。

    · 单例模式不易于测试。

    · 有线程不安全的问题。

     

    应用场景

    · 要求生成唯一序号的环境

    · 创建一个对象非常消耗资源时。

    · 需要定义大量静态常量和静态方法时。

    · 整个项目中需要一个共享访问点或共享数据时。

  • 相关阅读:
    再学 GDI+[47]: 路径 CloseFigure
    再学 GDI+[46]: 路径 Create、FillPath、DrawPath
    学习官方示例 TApplication.ExeName
    再学 GDI+[45]: 文本输出 在矩形中格式化输出
    再学 GDI+[50]: 路径 GetPathPoints、GetPathTypes、TPathData、GetPathData
    再学 GDI+[49]: 路径 GetPointCount、GetPathPoints、GetLastPoint、GetBounds
    再学 GDI+[48]: 路径 StartFigure、CloseFigure、CloseAllFigures
    微软DevWow博客达人征文大赛获奖名单
    开始组建博客园北京俱乐部
    .NET技术大会
  • 原文地址:https://www.cnblogs.com/whthomas/p/3773862.html
Copyright © 2011-2022 走看看