zoukankan      html  css  js  c++  java
  • 单例模式的理解与应用

    单例模式

     下面是java中使用单例模式的例子

    下面这个构造函数 是单利的关键

     

    单例模式用c++实现如下图

    简单说就是只能被new一次,其他部分要使用业务逻辑层 只能通过将原来的对象复制

    怎么复制?

     

    这里的CDALFile是类,pObjFile是类的对象,作为参数传到函数init中,在init函数中对单例模式下的对象进行修改

     

    这是c++中的单例 ,这是一种设计模式,

    就那业务逻辑层来说, 仅能允许 业务逻辑层对象被实例化一次,简单说就是只能被new一次,

    ●单例模式中

     1 package zzz;
     2 
     3 //单例模式代码
     4 
     5 public class dd {
     6 
     7          public static int iCount = 0;              
     8 
     9          static class abc{
    10 
    11              public static abc m_a;           
    12 
    13              public static abc initabc()
    14 
    15              {//2.自定义函数initabc封装构造函数abc(),使得构造函数只能在
    16 
    17                //initabc()里面调用,且通过if语句使得构造函数abc()只能被调用一次
    18 
    19                 if (m_a == null)
    20 
    21       {
    22 
    23                   m_a = new abc();                                           
    24 
    25                  }
    26 
    27                             return m_a;
    28 
    29              }        
    30 
    31          private abc()//1.一个无参的空构造函数,且为private型,保证不为外部随意调用
    32 
    33             {}        
    34 
    35          /*测试方法:打印m_a的值
    36 
    37                    public boolean getM_A(){
    38 
    39                             System.out.println(m_a);
    40 
    41                             return true;
    42 
    43                    }
    44 
    45           */
    46 
    47    } 
    48 
    49          /**
    50 
    51           * @param args
    52 
    53           */
    54 
    55          public static void main(String[] args)
    56 
    57          {
    58 
    59                    abc.m_a = null;//构造函数是private或protected时,不能用new方法构造出一个对象,是public时可以
    60 
    61                    abc.initabc();
    62 
    63                   
    64 
    65                    abc test1 = abc.initabc();//调用initabc方法时其实已经跳过abc(),m_a的值是第一次构造时的值
    66 
    67                    //test1.getM_A();
    68 
    69                                     
    70 
    71                    abc test2;
    72 
    73                    test2 = abc.initabc();//调用initabc方法时其实已经跳过abc(),m_a的值是第一次构造时的值
    74 
    75                    //test2.getM_A();                                    
    76 
    77                    System.out.println("nihao");
    78 
    79          }
    80 
    81 }
    82 
    83  
  • 相关阅读:
    Winform控件Enable=false显示优化
    request 报错The remote server returned an error: (415) Unsupported Media Type.
    InvalidArgument=Value of '1' is not valid for 'index'
    Redis学习笔记#12 Redis Cluster 集群
    centos7安装docker
    Redis学习笔记#11 关于key的建议
    Redis学习笔记#10 lua脚本,整合springboot调用
    ActiveMQ学习笔记#1
    SpringBoot学习笔记#2 具体化配置文件
    SpringBoot学习笔记#1 创建一个RESTful Web服务
  • 原文地址:https://www.cnblogs.com/baoxiaofei/p/4277871.html
Copyright © 2011-2022 走看看