初始化

设计模式之单例模式

你离开我真会死。 提交于 2020-02-08 05:50:36
单例模式 在有些系统中,为了节省内存资源、保证数据内容的一致性,对某些类要求只能创建一个实例,这就是所谓的单例模式。 单例模式的定义与特点 单例模式(Singleton Pattern)的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式。 单例模式有 3 个特点: 1.单例类只有一个实例对象; 2.该单例对象必须由单例类自行创建; 3.单例类对外提供一个访问该单例的全局访问点; 优点: 1、在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例。 2、避免对资源的多重占用(比如写文件操作)。 缺点: 没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。 单例模式的结构与实现 单例模式是 设计模式 中最简单的模式之一。通常,普通类的构造函数是公有的,外部类可以通过“new 构造函数()”来生成多个实例。但是,如果将类的构造函数设为私有的,外部类就无法调用该构造函数,也就无法生成多个实例。这时该类自身必须定义一个静态私有实例,并向外提供一个静态的公有函数用于创建或获取该静态私有实例。 下面来分析其基本结构和实现方法。 1. 单例模式的结构 单例模式的主要角色如下。 单例类:包含一个实例且能自行创建这个实例的类。 访问类:使用单例的类。 其结构如图 1 所示。                     图1

设计模式 - 单例模式

萝らか妹 提交于 2020-02-08 05:01:10
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 注意: 单例类只能有一个实例。 单例类必须自己创建自己的唯一实例。 单例类必须给所有其他对象提供这一实例。 介绍 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 主要解决:一个全局使用的类频繁地创建与销毁。 何时使用:当您想控制实例数目,节省系统资源的时候。 如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。 关键代码:构造函数是私有的。 应用实例: 一个班级只有一个班主任。 Windows 是多进程多线程的,在操作一个文件的时候,就不可避免地出现多个进程或线程同时操作一个文件的现象,所以所有文件的处理必须通过唯一的实例来进行。 一些设备管理器常常设计为单例模式,比如一个电脑有两台打印机,在输出的时候就要处理不能两台打印机打印同一个文件。 优点: 在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例(比如管理学院首页页面缓存)。 避免对资源的多重占用(比如写文件操作)。 缺点:没有接口,不能继承,与单一职责原则冲突

设计模式 - 单例模式

半世苍凉 提交于 2020-02-08 04:08:07
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 注意: 1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。 介绍 意图: 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 主要解决: 一个全局使用的类频繁地创建与销毁。 何时使用: 当您想控制实例数目,节省系统资源的时候。 如何解决: 判断系统是否已经有这个单例,如果有则返回,如果没有则创建。 关键代码: 构造函数是私有的。 应用实例: 1、一个党只能有一个主席。 2、Windows 是多进程多线程的,在操作一个文件的时候,就不可避免地出现多个进程或线程同时操作一个文件的现象,所以所有文件的处理必须通过唯一的实例来进行。 3、一些设备管理器常常设计为单例模式,比如一个电脑有两台打印机,在输出的时候就要处理不能两台打印机打印同一个文件。 优点: 1、在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例(比如管理学院首页页面缓存)。 2、避免对资源的多重占用(比如写文件操作)。 缺点: 没有接口

IOS基础——alloc、init和new方法

痴心易碎 提交于 2020-02-08 04:07:58
alloc:分配内存。 init:初始化。 new:代替上面两个函数:分配内存,并且初始化。 注意: 1.在实际开发中很少会用到new,一般创建对象时我们一般是 [[className alloc]init]; 2.区别只在于alloc分配内存的时候使用了zone它是给对象分配内存的时候,把关联的对象分配到一个相邻的内存区域内,以便于调用时消耗很少的内存,提升了程序处理速度。 3.不推荐使用new:原因是使用new的话,初始化方法被固定死只能使用init,不能调用其他的initXX方法。 4.采用new方法只能采用默认的init方法完成初始化,采用alloc的方式可以用其他定制的初始化方法。 来源: https://www.cnblogs.com/123qw/p/4340167.html

Activiti流程定义缓存源码分析7-流程缓存自定义

笑着哭i 提交于 2020-02-08 04:03:42
接下来,重点看一下Activiti中如何自定义流程缓存。 上面我们提到过自定义类首先需要继承StandaloneProcessEngineConfiguration类并通过动态属性注入方式为引擎配置类注入processDefinitionInfoCache属性值。实现代码如清单x-所示。 代码清单x-MyStandaloneProcessEngineConfiguration.java --------------------------------------------------------------------------------------------------------------------------- MyStandaloneProcessEngineConfiguration.java public class MyStandaloneProcessEngineConfiguration extends StandaloneProcessEngineConfiguration { #-1 //设置processDefinitionInfoCache对象的值 public void setProcessDefinitionInfoCache(ProcessDefinitionInfoCache cache) { super

iOS中alloc与init

落爺英雄遲暮 提交于 2020-02-08 04:03:33
面向对象的3大特性,封装继承和多态. 我遇到过封装相关的问题,因为初级封装简单,常常暴露出被你封装的接口,进一步进行高级封装隐藏接口的时候才发现,封装是一门学问,而这门学问得从最基础的alloc与init讲起. FatherModel.h #import <Foundation/Foundation.h> @interface FatherModel : NSObject @end FatherModel.m #import "FatherModel.h" @implementation FatherModel - (instancetype)init { self = [super init]; if (self) { NSLog(@"FatherModel"); } return self; } @end SonModel.h #import "FatherModel.h" @interface SonModel : FatherModel @end SonModel.m #import "SonModel.h" @implementation SonModel - (instancetype)init { self = [super init]; if (self) { NSLog(@"SonModel"); } return self; } @end 先看看 alloc

SpringIOC源码分析总结

社会主义新天地 提交于 2020-02-08 04:02:10
大致的加载过程: spring ioc容器的加载,大体上经过以下几个过程: 资源文件定位、解析、注册、实例化 1.资源文件定位:主要发生在ApplicationContext中,由于applicationContext继承于ResourceLoader,所以调用getResource()方法,将外部的资源解析成Resource类 2.解析:主要发生在BeanDefinitionReader中完成,最常用的类是XMLBeanDefiniationReader, ac利用loadBeanDefininiation()方法,负责读取Resource;将Resource的解析交给 XMLbeanDefiniationReader 去处理, 将XML文档解析成w3c的Document文档,BeanDefinitionDocumentReader进一步解析,BeanDefinitionDocumentReader将Document,交给 BeanDefiniationParserDetegate 去处理(装饰),如果是标准的NameSpace文档(import、alias、bean、beans),在内部解析,如果不是标准的文档,会委托合适的NameSpaceHander去处理进行解析,将结果封装到BeanDefiniationHolder

Java 基础:单例模式 Singleton Pattern

强颜欢笑 提交于 2020-02-08 03:39:25
1.简介 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 注意: 1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。 意图: 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 主要解决: 一个全局使用的类频繁地创建与销毁。 何时使用: 当您想控制实例数目,节省系统资源的时候。 如何解决: 判断系统是否已经有这个单例,如果有则返回,如果没有则创建。 关键代码: 构造函数是私有的。 2.单例模式的几种实现方式 单例模式的实现有多种方式,如下所示: 2.1.懒汉式,线程不安全 是否 Lazy 初始化: 是 是否多线程安全: 否 实现难度: 易 描述: 这种方式是最基本的实现方式,这种实现最大的问题就是不支持多线程。因为没有加锁 synchronized,所以严格意义上它并不算单例模式。 这种方式 lazy loading 很明显,不要求线程安全,在多线程不能正常工作。 public class Singleton { private static

代码中函数、变量、常量 / bss段、data段、text段 /sct文件、.map文件的关系[实例分析arm代码(mdk)]

…衆ロ難τιáo~ 提交于 2020-02-08 02:01:49
一. bss介绍:    代码中函数、变量、常量 / bss段、data段、text段 /sct文件、.map文件的关系[实例分析arm代码(mdk)] bss和data的区别: 全局的未初始化变量存在于.bss段中,具体体现为一个占位符; 全局的已初始化变量存于.data段中; .bss是不占用.exe文件空间的,其内容由操作系统初始化(清零); 而.data却需要占用,其内容由程序初始化。 若这样定义一个全局变量:int g_inBss[9] ; 则它在.bss段,这里占用占位符的空间。 若这样定义一个全局变量:int g_inData[9] ={1,2,3,4,5,6,7,8,9}; 则它在.data段,程序占用数组全部大小的空间。 bss和data的联系: 都在rw区域; bss段在运行起来成为进程之后,占的空间大小和data就相同了。 二. 分析 uboot代码中的clearbss段的代码: _bss_start 和 __bss_start ==================================== 1. u-boot-1.1.6/board/100ask24x0/u-boot.lds ...... ENTRY(_start) SECTIONS { . = 0x00000000; . = ALIGN(4); .text : { cpu/arm920t

Java--基础知识之JVM

走远了吗. 提交于 2020-02-08 01:34:21
一、什么是JVM 1、概念 JVM,即Java Virtual Machine(Java虚拟机),是Java和的核心和基础,是在Java编译器和操作系统平台间的虚拟处理器。JVM是利用软件方法实现的抽象的、计算机基于下层的操作系统和硬件平台可以在上面执行Java程序的字节码程序。 2、特点 JVM有完善的硬件架构(如处理器、堆栈、寄存器),其存在是为了支持与操作系统无关,实现Java跨平台。 3、Java的跨平台性 真正跨平台的是Java程序而非JVM。不同平台下安装了不同版本的JVM。编写的Java源码在编译后生成class文件(字节码文件),JVM是负责将这些字节码文件翻译成特定平台下的机器码然后运行,即在不同平台下安装对应的JVM,就可以运行编写的Java程序。而这个过程中Java程序没有做任何改变,只是通过JVM在不同平台上运行罢了,可以说是“一次编译,多处运行”。 4、启动与消亡 JVM负责运行一个Java程序,当启动一个Java程序时,也产生一个虚拟机实例,当程序关闭时这个虚拟机实例也消亡。 JVM运行起点:Java虚拟机实例通过调用某个初始类的main方法来运行Java程序,这个main方法是共有的、静态的、返回值为void类型,并传入一个字符串数组作为参数。 5、两种线程 (1)守护线程:通常由虚拟机自己使用,比如执行垃圾收集任务的线程