单例模式

单例模式

喜你入骨 提交于 2019-12-05 20:59:55
模式是脱离语言的。 问题的由来: 为什么? 多个线程操作不同实例对象。 多个线程要操作同一对象,要保证对象的唯一性 解决的问题: 实例化过程中只实例化一次 解决的思路 有一个实例化的过程(只有一次),产生实例化对象 new 提供返回实例对象的方法 getInstace() 单例模式的分类 线程的安全性、性能、懒加载(lazy ) 饿汉式 <init> public class HungerySingleton { //加载的时候就产生的实例对象 private static HungerySingleton instance=new HungerySingleton(); private HungerySingleton(){ } //返回实例对象 public static HungerySingleton getInstance(){ return instance; } public static void main(String[] args) { for (int i = 0; i < 20; i++) { new Thread(()->{ System.out.println(HungerySingleton.getInstance()); }).start(); } } } 线程安全性:在加载的时候已经被实例化,所以只有这一次,线程安全的。JVM

设计模式之Memento(备忘机制)

无人久伴 提交于 2019-12-05 20:35:16
1、创建型模式 JDK1.5枚举Singleton 单例模式 AbstractFactory 工厂方法模式 简单工厂模式 Builder Prototype 2、结构型 java设计模式—Adapter模式 从Decorator,Adapter模式看Java的IO库 Bridge Composite Decorator 外观模式 Facade Pattern 享元模式 Flyweight Pattern 代理模式 3、行为型 职责链模式 Chain of Responsibility Pattern Java之命令模式(Command Pattern) Iterator ( JAVA迭代器与迭代模式 ) 调停者模式(Mediator) 设计模式之Memento(备忘机制) Observer State Strategy Visitor 原文作者: duanxz 原文地址:https://www.cnblogs.com/duanxz/p/3633475.html 来源: https://www.cnblogs.com/wjqhuaxia/p/11945718.html

单例模式

孤者浪人 提交于 2019-12-05 20:28:46
class MySQL ( object ) : __instance = None #定义一个变量存实例 def __new__ ( cls , * args , * * kwargs ) : #重写__new__方法 if cls . __instance : #判断如果这个实例的值不为空 return cls . __instance #就返回这个实例 cls . __instance = super ( ) . __new__ ( cls ) #走到下面说明是第一次实例化,就调用父类的__new__函数实例化这个类,存到__instance变量里 return cls . __instance #然后返回这个实例 m = MySQL ( ) print ( '第一次实例化m' , m ) k = MySQL ( ) print ( '第二次实例化k' , k ) 来源: https://www.cnblogs.com/wangyujian/p/11945375.html

创建型模式(四) 单例模式

孤者浪人 提交于 2019-12-05 20:15:50
单例模式(Singleton Pattern):确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。单例模式的 要点 有三个:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。单例模式是一种对象创建型模式。 单例模式只包含一个单例角色:在单例类的内部实现只生成一个实例,同时它提供一个静态的工厂方法,让客户可以使用它的唯一实例;为了防止在外部对其实例化, 将其构造函数设计为私有 。 单例模式的目的是保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例类拥有一个私有构造函数,确保用户无法通过 new 关键字直接实例化它。除此之外,该模式中包含一个静态私有成员变量与静态公有的工厂方法。该工厂方法负责检验实例的存在性并实例化自己,然后存储在静态成员变量中,以确保只有一个实例被创建。 单例模式的 主要优点 在于提供了对唯一实例的受控访问并可以节约系统资源;其 主要缺点 在于因为缺少抽象层而难以扩展,且单例类职责过重。 单例模式 适用情况 包括:系统只需要一个实例对象;客户调用类的单个实例只允许使用一个公共访问点。 # -*- coding:utf-8 -*- class

设计模式

谁都会走 提交于 2019-12-05 18:08:48
目录 一、创建型模式 1. 单例模式 1.1请手写一个单例 1.2单例模式的优点和应用? 1.3单例模式的缺点 2. 工厂类相关模式 2.1工厂模式、简单工厂模式、抽象工厂模式 2.2工厂模式的优点和应用 2.3工厂模式的不足 3、建造者模式 3.2建造者模式的优点和使用场景 3.3建造者模式的缺点 4、原型模式 4.1原型模式 4.2原型模式的优点和使用场景 4.3原型模式的缺点 二、结构类设计模式 1、适配器模式 1.1适配器模式 1.2适配器模式的优点和使用场景 2、桥接模式 2.1桥接模式 2.2桥梁模式的优点和应用场景 3、 装饰器模式 3.1对装饰器的理解 ,并写出一个计时器记录方法执行性能的装饰器? 3.2装饰器模式的优点和应用场景 3.3装饰器模式的缺点 4、组合模式 4.1组合模式 4.2组合模式的优点和使用场景 4.3组合模式的缺点 5、门面模式 5.1门面模式 5.3门面模式的缺点 6、享元模式 6.1享元模式 6.2享元模式的优点和使用场景 6.3享元模式的缺点 7、代理模式 7.1代理模式 7.2代理模式的优点和使用场景 7.3代理模式的缺点 三、行为类设计模式 1、策略模式 1.1策略模式 1.2策略模式的优点和应用场景 1.3策略模式的缺点 2、责任链模式 2.1责任链模式 2.2责任链模式的优点和应用场景 2.3责任链模式的缺点 3、 命令模式 3

单例设计模式

谁都会走 提交于 2019-12-05 18:00:19
意图: 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 主要解决: 一个全局使用的类频繁地创建与销毁。 何时使用: 当您想控制实例数目,节省系统资源的时候。 如何解决: 判断系统是否已经有这个单例,如果有则返回,如果没有则创建。 关键代码: 构造函数是私有的。 优点: 1、在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例(比如管理学院首页页面缓存)。 2、避免对资源的多重占用(比如写文件操作)。 缺点: 没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。 使用场景: 1 、类的创建 2、创建的一个对象需要消耗的资源过多,比如 I/O 与数据库的连接等。 UML类图 单例模式的几种实现方式 1、懒汉式,线程不安全 2、懒汉式,线程安全 3、饿汉式 4、双检锁/双重校验锁(DCL,即 double-checked locking 5、登记式/静态内部类 6、枚举 来源: https://www.cnblogs.com/gcq243627152qq/p/11938808.html

python实现单例模式

三世轮回 提交于 2019-12-05 17:55:46
class SingletonType(type): def __init__(self,*args,**kwargs): super(SingletonType,self).__init__(*args,**kwargs) def __call__(cls, *args, **kwargs): # 这里的cls,即Foo类 print('cls',cls) obj = cls.__new__(cls,*args, **kwargs) cls.__init__(obj,*args, **kwargs) # Foo.__init__(obj) return obj class Foo(metaclass=SingletonType): # 指定创建Foo的type为SingletonType def __init__(self,name): self.name = name def __new__(cls, *args, **kwargs): return object.__new__(cls) obj = Foo('xx') 来源: https://www.cnblogs.com/zhaogang0104/p/11938683.html

java|设计模式详解(最全)

眉间皱痕 提交于 2019-12-05 17:13:03
一、设计模式的分类 总体来说设计模式分为三大类: (1)创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 (2)结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 (3)行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。用一个图片来整体描述一下: 二、设计模式的六大原则 1、开闭原则(Open Close Principle) 开闭原则就是说 对扩展开放,对修改关闭 。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。 2、里氏代换原则(Liskov Substitution Principle) 里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为

单例模式的三种实现 以及各自的优缺点

我的未来我决定 提交于 2019-12-05 16:36:00
单例模式: 单例模式的意思就是只有一个 实例 。单例模式确保某一个类只有一个实例,而且自行 实例化 并向整个系统提供这个实例。这个类称为单例类。 单例模式有三种:懒汉式单例,饿汉式单例,登记式单例。 1.懒汉式单例 public class Singleton { private static Singleton singleton; private Singleton() {} //此类不能被实例化 public static synchronized Singleton getInstance() { if (singleton == null) { singleton = new Singleton(); } return singleton; } } 优点:第一次调用才初始化,避免内存浪费。 缺点:必须加锁synchronized 才能保证单例,(如果两个线程同时调用getInstance方法,会chuxia)但加锁会影响效率。 2.饿汉式单例 public class Singleton { private static final Singleton SINGLETON = new Singleton(); private Singleton() {} //此类不能被实例化 public static Singleton getInstance() { return

【设计模式】单例模式的八种姿态写法分析

馋奶兔 提交于 2019-12-05 16:30:05
目录 何谓单例模式? 单例模式的优点 单例模式实现整体思路流程 单例模式的适用场景 单例模式的八种姿态写法 JDK源码中单例模式的应用 单例模式总结 前言 网上泛滥流传单例模式的写法种类,有说7种的,也有说6种的,当然也不排除说5种的,他们说的有错吗?其实没有对与错,刨根问底,写法终究是写法,其本质精髓大体一致!因此完全没必要去追究写法的多少,有这个时间还不如跟着宜春去网吧偷耳机、去田里抓青蛙得了,一天天的.... 言归正传...单例模式是最常用到的设计模式之一,熟悉设计模式的朋友对单例模式绝对不会陌生。同时单例模式也是比较简单易理解的一种设计模式。 @ 何谓单例模式? 专业术语 单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。 单例模式,简单的说就是 一个类只能有一个实例,并且在整个项目中都能访问到这个实例。 单例模式的优点 1、在内存中只有一个对象,节省内存空间。 2、避免频繁的创建销毁对象,可以提高性能。 3、避免对共享资源的多重占用。 4、可以全局访问。 单例模式实现整体思路流程