实例化

设计模式 - 单例模式

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

详谈单例、饿汉、和懒汉模式

别等时光非礼了梦想. 提交于 2020-02-07 18:26:19
一、基本概念 单例模式属于创建型设计模式。 确保一个类只有一个实例,并提供该实例的全局访问点。 实现: 使用一个私有构造函数、一个私有静态变量以及一个公有静态函数来实现。 二、结构 类图: 私有构造函数保证了不能通过构造函数来创建对象实例,只能通过公有静态函数返回唯一的私有静态变量。 三、几类经典单例模式实现 1、懒汉式-线程不安全 下面的实现中,私有静态变量 uniqueInstance 被延迟实例化,这样做的好处是,如果没有用到该类,那么就不会实例化 uniqueInstance ,从而节约资源。 这个实现在多线程环境下是不安全的,如果多个线程能够同时进入 if (uniqueInstance == null) ,并且此时 uniqueInstance == null ,那么会有多个线程执行 uniqueInstance = new Singleton(); 语句,这将导致实例化多次 uniqueInstance 。 // 懒汉式: 线程不安全 // 有延迟加载: 不是在类加载的时候就创建了,而是在调用newStance()的时候才会创建 public class Singleton { private static Singleton uniqueInstance; private Singleton(){ } public static Singleton

单例模式(Singleton)

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

Java入门part5--类和对象

▼魔方 西西 提交于 2020-02-07 05:13:33
类和对象 oop语言的三大特征?(OOP 面向对象的程序设计语言 Object-oriented-program) 继承 封装 多态 什么是类?什么是对象? 类是一类对象的统称,对象是类的具体化的实例。在现实世界中类就相当于设计图纸,而对象就是根据图纸建造出来的房子。 面向对象 关注对象 即参与过程所涉及到的主体 处理大问题 面向过程 关注过程 即整个过程中涉及的行为 处理小问题 类和类的实例化 A . 如何产生一个类 //产生类的语法 class 类名{ field;//成员字段 即类中的元素 method;//成员方法 } 比如 class Person{ //属性 成员变量 实例成员变量 存放在对象内 public String name; public int age; //static修饰的 静态成员变量(也叫类变量)编译时已产生 属于类本身且只有一份 放在方法区 public static int count = 10; //被static和final同时修饰 静态常量 属于类本身 只有一份 后续不可更改 放在方法区 public static final int SIZE = 20; //实例成员常量 被final修饰 也属于对象 放在哪个区不一定 public final int SIZE2 = 30; //构造方法 public Person(String

C++语法基础之STL集合类

落花浮王杯 提交于 2020-02-07 05:03:58
set 和 multiset 头文件:< set > 内部使用类似二叉树的方式实现,不能够替换或者直接修改指定位置的元素,但是能够对元素进行排序并实现快速查找建。 实例化 默认谓词:std::less,实现升序排列 实例化一个升序排列的set或者multiset(也可以直接greater< type >) // used as a template parameter in set / multiset instantiation template < typename T > struct SortDescending { bool operator ( ) ( const T & lhs , const T & rhs ) const { return ( lhs > rhs ) ; } } ; set < int , SortDescending < int >> setInts ; multiset < int , SortDescending < int >> msetInts ; 此外,还可以直接使用其他set、multiset、vector、list或者其他STL容器初始化 插入 使用成员函数insert() 参数是要插入的值或者指定范围 setInts . insert ( - 1 ) ; msetInts . insert ( setInts . begin (

12.Java String类详解

二次信任 提交于 2020-02-07 04:13:42
String类是一个字符串类型的类,使用“XXXX”定义的内容都是字符串,虽然这个类在使用上有一些特殊,但是String本身是一个类。 一、String的实例化两种方式 1、直接赋值实例化: String StringName= "xxx" ; 以上是String对象的直接赋值,以上的代码并没有使用关键字new进行。String类也是类,所以也有构造方法。 2、使用构造方法实例化: public String (String str); 可以通过构造方法为String类对象实例化,但在构造里面依然要接收一个本类对象。 二、字符串的比较 如果要想知道两个int型变量是否相等,使用“==”进行验证,在String中也可以使用“==”来进行比较。我们来看一个例子: public class StringDemo { public static void main (String args[]) { String str1 = "Hello" ; String str2 = new String( "Hello" ) ; String str3 = str2 ; // 引用传递 System. out .println(str1 == str2) ; System. out .println(str1 == str3) ; System. out .println(str2 == str3

9.Java类和对象 详解(一)

北城余情 提交于 2020-02-06 13:05:25
一、面向对象简述 面向对象是一种现在最为流行的程序设计方法,几乎现在的所有应用都以面向对象为主了,最早的面向对象的概念实际上是由IBM提出的,在70年代的Smaltalk语言之中进行了应用,后来根据面向对象的设计思路,才形成C++,而由C++产生了Java这门面向对象的编程语言。 但是在面向对象设计之前,广泛采用的是面向过程,面向过程只是针对于自己来解决问题。面向过程的操作是以程序的基本功能实现为主,实现之后就完成了,也不考虑修改的可能性,面向对象,更多的是要进行子模块化的设计,每一个模块都需要单独存在,并且可以被重复利用,所以,面向对象的开发更像是一个具备标准的开发模式。 在面向对象定义之中,也规定了一些基本的特征: (1)封装:保护内部的操作不被破坏; (2)继承:在原本的基础之上继续进行扩充; (3)多态:在一个指定的范围之内进行概念的转换。 对于面向对象的开发来讲也分为三个过程:OOA(面向对象分析)、OOD(面向对象设计)、OOP(面向对象编程)。 二、类与对象的基本概念 类与对象时整个面向对象中最基础的组成单元。 类 :是抽象的概念集合,表示的是一个共性的产物,类之中定义的是属性和行为(方法); 对象 :对象是一种个性的表示,表示一个独立的个体,每个对象拥有自己独立的属性,依靠属性来区分不同对象。 可以一句话来总结出类和对象的区别:类是对象的模板,对象是类的实例

创建型设计模式

只愿长相守 提交于 2020-02-06 12:29:45
目录 1.单例模式 2.简单工厂模式 3.工厂方法模式 4.抽象工厂模式 5.生成器模式 6.原型模式 1.单例模式 1)确保一个类只有一个实例,并提供该实例的全局访问点。 2)使用一个私有构造函数、一个私有静态变量以及一个公有静态函数来实现。 私有构造函数保证了不能通过构造函数来创建对象实例,只能通过公有静态函数返回唯一的私有静态变量。 //1.懒汉式-线程不安全 //这个实现在多线程环境下是不安全的 //如果多个线程能够同时进入 if (uniqueInstance == null) //并且此时 uniqueInstance 为 null //那么会有多个线程执行 uniqueInstance = new Singleton(); 语句, //这将导致实例化多次 uniqueInstance。 public class Singleton { private static Singleton uniqueInstance; private Singleton() { } public static Singleton getUniqueInstance() { if (uniqueInstance == null) { uniqueInstance = new Singleton(); } return uniqueInstance; } } //2.饿汉式-线程安全 /

模板显式、隐式实例化和(偏)特化、具体化的详细分析

心不动则不痛 提交于 2020-02-06 05:32:32
最近看了<The C++ Programing Language>看到了模板的特化,突然想起来<C++ Primer>上说的显式具体化、隐式具体化、特化、偏特化、具体化等概念弄得头晕脑胀,我在网上了找了好多帖子,才把概念给理清楚。 一下是我把再网上找的资料整理一下。 看着这么多叫法,其实就是三种。 1. 显示实例化 2. 隐式实例化 3. 特化(=具体化)、偏特化 一、实例化 1.显示、隐式实例化 什么是实例化:一个通过使用具体值替换模板参数,从模板产生的普通类,函数或者成员函数的过程。 显示实例化:通过名字可见,就是清楚的表明你要实例化的类型 隐式实例化:通过编译器自己推测判断要实例化的类型。 比如一个模板: template<class T> //函数模板实现 void swap(T &a, T &b) { T temp; temp = a; a = b; b = temp; } a. 显示实例化 template void swap<int>(); // 无须给该函数重新编写函数体,这只是个声明 为什么要显示实例化? 主要是 提高效率, 当显式实例化模板时,在使用模板之前,编译器根据显式实例化指定的类型生成模板实例,这样就相当于本程序里面有个一 void swap(int &a, int &b) { int temp; temp = a; a = b; b = temp; }

C++ 模板何时被实例化

匆匆过客 提交于 2020-02-06 05:30:07
今天编程时碰到一个问题,写了一个单例的类模板,之前程序一直能跑,但今天使用了其中一个函数时却报错。后续查错,发现是自己忘记写结束符号了。 这就引出我知识点的不足了——之前为啥能跑正常?错误一只存在,为啥总是能编译通过?类中的函数何时才被实例化?类何时实例化?实例化的类是不是所有的函数都同时被实例化? 整理和理解网上资料后获得如下总结: 1. 在我们使用类模板时,只有当代码中使用了类模板的一个实例的名字,而且上下文环境要求必须存在类的定义时,这个类模板才被实例化。   1.1声明一个类模板的指针和引用,不会引起类模板的实例化,因为没有必要知道该类的定义 。   1.2 定义一个类类型的对象时需要该类的定义,因此类模板会被实例化 。   1.3 在使用sizeof()时,它是计算对象的大小,编译器必须根据类型将其实例化出来,所以类模板被实例化 .   1.4 new表达式要求类模板被实例化。   1.5 引用类模板的成员会导致类模板被编译器实例化。   1.6 需要注意的是,类模板的成员函数本身也是一个模板。标准C++要求这样的成员函数只有在被调用或者取地址的时候,才被实例化。 用来实例化成员函数的类型,就是其成员函数要调用的那个类对象的类型 总结1很好的解释了为啥我的程序在调用特定的成员函数时才会报错。 不过上面的介绍还是比较笼统,还有很多的细节点需要注意到,从网上转载如下:转载链接