一.模式解析: 单例模式是最简单和最常用的设计模式,面试的时候,不管新毕业的学生还是已经工作多年的筒子,对单例模式基本都能聊上两句.单例模式主要体现在如下方面: 1.类的构造函数私有化,保证外部不能直接使用构造函数创建类的实例 2.提供获取实例的方法,外部可以通过此方法获取已经创建好的实例对象, 3.获取实例的方法必须保证实例唯一性. 4.根据获取实例方法保证唯一性的方式,单例模式又分为以下几种: 二.模式代码 1.懒汉模式 /** * 单例模式-懒汉模式 * 懒汉模式意味着此模式比较懒惰,直到…
设计模式 单例模式(Singleton) [ 转载2 ] @author java_my_life 单例模式的结构 单例模式的特点: 单例类只能有一个实例. 单例类必须自己创建自己的唯一实例. 单例类必须给所有其他对象提供这一实例. 饿汉式单例类 public class EagerSingleton { private static EagerSingleton instance = new EagerSingleton(); /** * 私有默认构造子 */ private EagerSin…
设计模式 单例模式(Singleton) [ 转载 ] 转载请注明出处:http://cantellow.iteye.com/blog/838473 前言 懒汉:调用时才创建对象 饿汉:类初始化时就创建对象 第一种(懒汉,线程不安全): public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (inst…
一,前言 单例模式详细大家都已经非常熟悉了,在文章单例模式的八种写法比较中,对单例模式的概念以及使用场景都做了很不错的说明.请在阅读本文之前,阅读一下这篇文章,因为本文就是按照这篇文章中的八种单例模式进行探索的. 本文的目的是:结合文章中的八种单例模式的写法,使用实际的示例,来演示线程安全和效率 既然是实际的示例,那么就首先定义一个业务场景:购票.大家都知道在春运的时候,抢票是非常激烈的.有可能同一张票就同时又成百上千的人同时在抢.这就对代码逻辑的要求很高了,即不能把同一张票多次出售,也不能出现…
题外话:好久没写blog,做知识归纳整理了.本来设计模式就是个坑,各种文章也写烂了.不过,不是自己写的东西,缺少点知识的存在感.目前还没做到光看即能记住,得写.所以准备跳入设计模式这个大坑. 开篇先贡献给 单例模式(Singleton Pattern) 目的:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 其实单例模式应用很多,我也不陌生,有时候一些自己定义的Controller等,都会选择单例模式去实现,而本身java.lang.Runtime类的源码也使用了单例模式(Jdk7u40)…
.net设计模式: Net设计模式实例之单例模式( Singleton Pattern)  一 : 单例模式的简介:(Brief Introduction) 单例模式(Singleton Pattern),保证一个类只有一个实例,并提供一个访问它的全局访问点.单例模式因为Singleton封装它的唯一实例,它就可以严格地控制客户怎样访问它以及何时访问它.简单说就是单一模式:仅能有你一个人访问: 二.解决的问题(What To Solve) 当一个类只允许创建一个实例时,可以考虑使用单例模式. 三…
一.模式解析 Flyweight在拳击比赛中指最轻量级,即“蝇量级”或“雨量级”,这里选择使用“享元模式”的意译,是因为这样更能反映模式的用意.享元模式是对象的结构模式.享元模式以共享的方式高效地支持大量的细粒度对象. 享元模式:主要为了在创建对象时,对共有对象以缓存的方式进行保存,对外部对象进行单独创建 模式要点: 1.享元模式中的对象分为两部分:共性部分和个性化部分,共性部分就是每个对象都一致的或者多个对象可以共享的部分,个性化部分指差异比较大,每个类均不同的部分 2.共性部分的抽象就是此模…
一.模式解析 提起prototype,最近看多了js相关的内容,第一印象首先是js的原型 var Person=function(name){ this.name=name; } Person.prototype.run=function(){ alert(this.name+" is running"; } 此处的原型是js的特殊定义,在原型上定义的属性和方法所有的类进行共享. 不过设计模式中的原型模式指的是:将已有的对象作为原型,拷贝出一份具有相同属性的新的对象. 模式定义为:原型…
.客户端代码 static void Main(string[] args) { Singleton singleton2 = Singleton.GetInstance(); Singleton singleton3 = Singleton.GetInstance(); if (singleton2 ==singleton3) { Console.WriteLine("实例singleton2与实例singleton3相同!"); } Console.ReadKey(); } 问题描…
一.模式解析 解释器模式是类的行为模式.给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器.客户端可以使用这个解释器来解释这个语言中的句子. 以上是解释器模式的类图,事实上我很少附上类图,但解释器模式确实比较抽象,为了便于理解还是放了上来,此模式的要点是: 1.客户端提供一个文本.表达式或者其他,约定解析格式 2.针对文本中可以分为终结符表达式和非终结符表达式, 3.终结符表达式无需进一步解析,但仍需要转化为抽象接口的实例 4.针对非终结表达式,没一种标示需要定义一种解…
一.模式解析 用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互. 中介模式又叫调停者模式,他有如下特点: 1.有多个系统或者对象发生交互,但又不能直接进行交互: 2.通过一个中介者来保留所有的交互对象(又叫同事类)的引用: 3.同事类同事也需要保留中介者的引用,以便调用中介者中的方法与其他同事类发生交互 4.中介者根据实际情况,如果系统复杂,有多个中介者,那么可以编写抽象中介者,如果没有则直接编写具体中介者 二.模式代码…
一.模式解析 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任. 责任链模式的要点主要是: 1.有多个对象共同对一个任务进行处理. 2.这些对象使用链式存储结构,形成一个链,每个对象知道自己的下一个对象. 3.一个对象对任务进行处理,可以添加一些操作后将对象传递个下…
一.模式解析 迭代子模式又叫游标(Cursor)模式,是对象的行为模式.迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象 1.迭代子模式一般用于对集合框架的访问,常用的集合框架为list,set,map在实现的时候均可以支持迭代子模式 2.迭代子模式使用同意接口Iterator来完成对象的迭代,一般接口需要实现如下功能:first,next,isDone,currentItem等遍历接口 3.常用的集合框架根据访问需要,可以使用数组,链表等数据结构进行实现,使用迭代子模式可以屏蔽…
一.模式解析 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 也就是说,如果已经写好了一个接口,但是又来了一种截然不同的接口,如果使用新接口可能导致原来大面积的修改,那么可以考虑使用适配器模式将新的接口适配旧接口. 适配器接口比较简单,而且适配一词现实中用的也比较多,如电源适配器,都是一个道理,所以直接上代码 二.模式代码 1.原有接口 package adapter.patten; public interface Tar…
一.模式解析 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化. 策略模式的关键点为: 1.多种算法存在 2.算法继承同样的接口,执行同样的行为,为可以替代的 3.算法调用者唯一,算法调用者可以灵活改变自己需要调用的算法,从而实现计算. 二.模式代码 算法接口: /** * 算法统一接口,所有算法继承此接口 * @author zjl * @time 2016-1-24 * */ public interface IStra…
一.单例模式的介绍 单例模式简单说就是掌握系统的至高点,在程序中只实例化一次,这样就是单例模式,在系统比如说你是该系统的登录的第多少人,还有数据库的连接池等地方会使用,单例模式是最简单,最常用的模式之一,面试经常会问答,所以我们在程序考虑什么地方会用到单例模式,单例模式写法有很多种,这里我下面列举2种写法很普遍的写法,然后做个多线程计数的例子大家来理解一下单例模式的用法. 二.单例模式Demo /// <summary>    /// 利用C#的特性单例模式    /// </summa…
单例模式很显然是定义一个类,这个类在程序中只有唯一的实例对象.一般单例类的构造函数是私有的,只能通过调用静态函数GetInstance来获取实例. 一.单例模式有三种:懒汉式单例.饿汉式单例.登记式单例(利用java内部类的概念). 1.懒汉式单例 public class Singleton { private static Singleton singleton; private Singleton() {} //此类不能被实例化 public static synchronized Sin…
设计模式:是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 总体来说设计模式分为23种三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式…
单例模式顾名思义整个程序下只有一个实例,例如一个国家只有一个皇帝,一个军队只有一个将军.单例模式的书写又分为饿汉模式和懒汉模式 饿汉模式   类中代码 package demo; public class Singleton { //私有化构造函数 private Singleton() { } //由于外部无法实例对象,顾在类中实例,定义为static将对象直接由类调用 private static Singleton instance = new Singleton(); //定义公有成员函…
保证一个类仅有一个实例,并提供一个访问它的全局访问点.——DP UML类图 模式说明 个人认为单例模式是所有设计模式中最为简单的一个模式,因为实现这个模式仅需一个类,而不像其他模式需要若干个类.这个模式中,需要注意的一点就是获取实例时的线程安全问题. 通常单例模式的实现方式如下: class ToolBox { // 阻止外部实例化ToolBox private ToolBox() { guid = Guid.NewGuid(); } private static ToolBox instanc…
一.模式解析 备忘录对象是一个用来存储另外一个对象内部状态的快照的对象.备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉(Capture)住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态.备忘录模式常常与命令模式和迭代子模式一同使用. 备忘录模式可以根据客户指令,将相应的对象特有属性进行快照,如果客户要恢复对象,则根据快照提供的特有属性进行还原. 二.模式代码 package memento.patten; /** *备忘录类,同时指定要保存的对象属性…
一.模式解析 建造模式是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内部是如何建造成成品的,调用者无需关心. 以上是对建造者模式的官方定义,简单说就是对于复杂对象的创建,由一个建造者封装了对象组件的生成,由专门的指挥者来负责指挥对象生产和组件装配,调用者仅需要通知指挥者建造者进行生产,即可从对象本身获取完整对象. 要点为: 1. 模式的主要参与者为:抽象建造者,具体建造者,指挥者. 2.具体建造者负责具体实施生产 3.指挥者仅负责提供解决方案和流程 4.最终…
模式说明: 保证每一个类仅有一个实例,并提供一个访问它的全局访问点(即自行实例化并向整个系统提供这个实例). 应用场景: 1.如配置文件取值类AppConfig(本身实例化对象比较大,且没有必要实例化多个) 每一个AppConfig实例对象都封装着配置文件的内容,如果系统中有多个AppConfig实例对象,系统中就会同时存在多份配置文件的内容,这样会严重浪费内存资源.如果配置文件内容比较多,多个实例对于系统资源的浪费就会更大.事实上,对于AppConfig这种类,在运行期间,一个实例对象就足够了…
配置文件: 需求:配置文件,默认配置和手动配置分开,参考django的配置文件方案,默认配置文件放在项目容器内部,只让用户做常用配置. /bin/settings.py(手动配置) PLUGIN_ITEMS = { "nic": "src.plugins.nic.Nic", "disk": "src.plugins.disk.Disk", } API = "http://127.0.0.1:8000/api/serv…
//以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码 //Singleton.h #pragma once #include<iostream> class Singleton { public: static Singleton* Instance(); protected: Singleton(); private: static Singleton* _instance; }; //Singleton.cpp #include"Singleton.h&q…
一.模式解析 装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 装饰模式的要点主要是: 1.需要对已有对象扩展新的功能,又不希望改变原有对象接口: 2.装饰者对象与原有对象需要继承相同接口,初始化装饰对象时将原有对象传入装饰对象: 3.可以对一个对象定义多个装饰着对象,进行分别装饰或者组合装饰…
一.模式解析 将对象组合成树形结构以表示“部分整体”的层次结构.组合模式使得用户对单个对象和使用具有一致性. 组合模式的要点是: 1.对象整体以树形层次结构进行展示 2.树的根节点和子节点均可以添加删除子节点,叶子节点无子节点 3.可以通过节点的行为动作调用并展示他所有自己点的行为 4.为了方便的实现无限节点的扩展,我们通常定义一个公共的接口,所有子节点和叶子节点均实现此接口 二.模式代码 1.公共接口,供所有子节点和叶子节点实现 package component.patten; public…
一.模式解析 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己. 观察者模式又叫订阅发布模式,从模式理解上来讲,订阅发布模式更好的体现了此模式的含义,因为在我的理解中,观察者和被观察者的关系是,观察者应该时时关注被观察者的动向,如果被观察者发生了变化,那么观察者应该发生对应的关系,比如看球,每个观众都在观察场上局势,如果球进了,有些观众或鼓掌,有些会欢呼,甚至有些会luoben..这时候并不…
一.模式解析: 策略模式一节讲过,通过扩展持有者,使持有者形成抽象类,然后实现多个具体持有者,策略模式可以转化为桥接模式. 桥接模式定义为:将抽象部分与实现部分分离,使它们都可以独立的变化,在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,使用桥接模式可以应对多维度的变化. 主要有两个要点 1.有两个维度的变化,彼此的变化应该不会受到对方的干扰 2.通过接口进行关联,共有n*m种组合 3.其中一个维度,保存这另外一个维度的引用 二.模式代码: 维度一 interface Impl…
开发中,我们或多或少地接触了设计模式,但是很多时候不知道自己使用了哪种设计模式或者说该使用何种设计模式.本文意在梳理常见设计模式的特点,从而对它们有比较清晰的认知. JavaScript 中常见设计模式 单例模式 策略模式 代理模式 迭代器模式 发布-订阅模式 命令模式 组合模式 模板方法模式 享元模式 职责链模式 中介者模式 装饰者模式 状态模式 适配者模式 各设计模式关键词 看完了上述设计模式后,把它们的关键词特点罗列出来,以后提到某种设计模式,进而联想相应的关键词和例子,从而心中有数. 设…