[置顶]单例模式的理解与应用

来源:互联网 发布:数据库系统概论第5版 编辑:程序博客网 时间:2024/06/14 10:43
单例模式

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

public class BusinessBll{      private static BusinessBll bussinessBll = null;            private Context context;      public BusinessBll(Context context){          this.context = context;      }            public static BusinessBll getBusinessBll(Context context){          if(businessBll == null){              businessBll = new BusinessBll(context);          }          return businessBll;      }  }  

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

 public static BusinessBll getBusinessBll(Context context){          if(businessBll == null){              businessBll = new BusinessBll(context);          }          return businessBll;      }  

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

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

怎么复制?

 

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

 

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

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

●单例模式中

//单例模式代码public class dd {          public static int iCount = 0;                        static class abc         {            public static abc m_a;                         public static abc initabc()              {                 //2.自定义函数initabc封装构造函数abc(),使得构造函数只能在                 //initabc()里面调用,且通过if语句使得构造函数abc()只能被调用一次                 if (m_a == null)           {                   m_a = new abc();                                                            }                     return m_a;              }                       private abc()//1.一个无参的空构造函数,且为private型,保证不为外部随意调用              {}                       /*测试方法:打印m_a的值              public boolean getM_A(){                     System.out.println(m_a);                     return true;             }            */      }         /**          * @param args          */        public static void main(String[] args)        {              abc.m_a = null;//构造函数是private或protected时,不能用new方法构造出一个对象,是public时可以              abc.initabc();              abc test1 = abc.initabc();//调用initabc方法时其实已经跳过abc(),m_a的值是第一次构造时的值              //test1.getM_A();              abc test2;              test2 = abc.initabc();//调用initabc方法时其实已经跳过abc(),m_a的值是第一次构造时的值              //test2.getM_A();                                                  System.out.println("nihao");       }}


1 0
原创粉丝点击