`

【设计模式】单实例模式

阅读更多

         单例模式(Singleton)
定义:

单例模式确保某一个类只有一个 实例,而且自行实例化向整个系统 提供这个实例。这个类称为单例类。
要点:

1、只有一个实例;

2、自行实例化;

3、向整个系统提供该实例。
应用场景:

很多操作的对象是同一对象,且同时只容许一个操作操作该对象的场景。

如: 同桌两人共用一瓶颜料来画自己的作品,但颜料瓶的瓶口大小同时只能容许一个画笔蘸取颜料。就是一个生活中的典型的单例模式的应用。
作用: 1、减少不必要的实例化对象,减少内存占用。2、避免程序的逻辑错误。
两种形式:

注:来自百度百科的指导。
  第一种形式: 也是常用的形式。
  public class Singleton {
  private static Singleton instance = null;
  private Singleton(){
  //do something
  }
  public static Singleton getInstance(){
  if(instance==null){
  instance = new Singleton();
  }
  return instance;
  }
  } //这个方法不用每次都进行生成对象,第一次生成,提高了效率。而下面的方法则只要调用,就会事例化一次。
  第二种形式:
  public class Singleton {
  //在自己内部定义自己的一个实例,只供内部调用
  private static Singleton instance = new Singleton();
  private Singleton(){
  //do something
  }
  //这里提供了一个供外部访问本class的静态方法,可以直接访问
  public static Singleton getInstance(){
  return instance;
  }
  }
我的事例如下:

用的是百度百科中提供的第一个方法形式,结合上面提到的生活中的事例:

单例类:

public class InkBottle {
	// 创建瓶口对象
	private static InkBottle bottleInterface = null;
	private String inkcolor="blue";
	// 颜料瓶的构造函数
	private InkBottle() {
		// do something	
	}

	// 得到颜料瓶口对象的方法,定义为静态,以便多个类共享。
	public static InkBottle getBottleInterface() {
		// 判断瓶口对象是否为空,为空时,创建瓶口对象(判断瓶口是否有笔,没有就蘸颜料)
		if (bottleInterface == null) {
			bottleInterface = new InkBottle();
			System.out.println("对象获得了!");
		}
		return bottleInterface;
	}
	public String getColor(){
		return inkcolor;
	}
	public String setColor(String h){
		System.out.println("颜色设置了!");
		return this.inkcolor=h;
	}
}

 学生A:

public class StudentA extends Thread {
	InkBottle auser = InkBottle.getBottleInterface();

	public void draw() {
		System.out.println(auser.getClass().getName() + "A得到颜料:"
				+ auser.getColor() + " " + System.currentTimeMillis());

	}

	public void setcolor() {
		auser.setColor("red");

		System.out.println(auser.getClass().getName() + "A设置颜料:red  "
				+ System.currentTimeMillis());

	}

	public void run() {
		while (true) {
			this.draw();
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			this.setcolor();
		}
	}
}
 

学生B:与学生A的类似。

主方法:

public class Test {
	public static void main(String[] args){
		Test t=new Test();
		StudentA a=new StudentA();
		StudentB b=new StudentB();
		a.start();
		b.start();
	}
}

 

0
0
分享到:
评论

相关推荐

    设计模式实例源码

    这个压缩包文件名为“23种设计模式示例源码”,暗示其中包含了解决23种经典设计模式的具体实现代码,这对于初学者或者希望深入理解设计模式的开发者来说是一份宝贵的资源。下面将对这23种设计模式进行详细解释。 1....

    设计模式实例代码

    在本案例中,我们聚焦于C#语言中的设计模式,通过"设计模式实例代码"这个项目,我们可以深入理解并学习这些模式的实际应用。 "设计模式"标签表明了这个压缩包的内容主要围绕设计模式展开,涵盖了面向对象设计的核心...

    工厂设计模式简单实例

    在这个名为"工厂设计模式简单实例"的资料中,我们可以期待看到一个基础的工厂模式实现。 工厂模式的核心思想是定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪一个类。这样,客户端在使用时无须知道...

    设计模式 单件模式 设计模式 单件模式

    单件模式是一种非常实用的设计模式,它可以控制一个类的实例数量,使得调用者可以从一个公共的众所周知的访问点访问。 单件模式的实现基于两个要点:首先,不直接用类的构造函数,而另外提供一个 Public 的静态方法...

    23种设计模式实例

    总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元...

    设计模式c++ 实例源码

    本资源“设计模式c++ 实例源码”提供了C++语言实现的各种设计模式的实例,帮助开发者深入理解和应用这些模式。 1. **单例模式**:确保一个类只有一个实例,并提供一个全局访问点。在C++中,单例模式通常通过静态...

    java设计模式代码实例

    在给定的压缩包文件中,包含了多种设计模式的代码实例,我们将逐一探讨这些模式及其应用。 1. **策略模式(01-策略模式)**:策略模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,让算法独立于使用...

    java设计模式实例

    本资源“java设计模式实例”旨在通过实际的代码示例帮助程序员深入理解并熟练应用设计模式。 1. **单例模式(Singleton)**:确保一个类只有一个实例,并提供全局访问点。在Java中,通常使用双重检查锁定(Double-...

    24种设计模式以及混合设计模式

    1. 在Web开发中,Spring框架就广泛应用了设计模式,如工厂模式用于创建Bean,单例模式保证每个Bean只有一个实例,观察者模式用于事件驱动编程,策略模式用于实现AOP(面向切面编程)。 2. 在游戏开发中,状态模式常...

    java23种设计模式+23个实例demo

    java23种设计模式+23个实例demo: 关于代码的几点说明: 1. 代码为根据个人对Design Pattern的学习理解写出, 2. 每个Pattern均是一个目录,其目录名即是Pattern的名字, 所有代码用JDeveloper 9i 和JBuilder 6.0编写...

    轻量级设计模式的实例 JAVA版

    标题“轻量级设计模式的实例JAVA版”指的是以Java语言实现的轻量级设计模式的案例,其中重点介绍了享元模式的应用。享元模式的核心是共享技术,它有效地支持大量细粒度对象的复用,将享元对象的外部状态和内部状态...

    设计模式逐个实例解析

    本资料集“设计模式逐个实例解析”深入浅出地探讨了多种经典的设计模式,旨在帮助开发者更好地理解和应用这些模式。 首先,策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。通过定义一系列算法,并将...

    ASP.NET 23种设计模式简单实例代码

    在这个名为"ASP.NET 23种设计模式简单实例代码"的压缩包中,你将找到23种经典设计模式在.NET环境下的具体实现,这对于学习和理解设计模式非常有帮助。 1. 工厂模式:工厂模式是一种创建型设计模式,它提供了一种...

    Java设计模式 代码实例

    经典的java设计模式,有代码案例图文案例,面试常考得java设计模式。

    设计模式——单实例模式、单件模式——Java编写

    单实例模式是软件设计模式中的一种,它的核心思想是确保一个类在整个系统运行过程中只有一个实例存在,并提供一个全局访问点,以保证所有对该类对象的访问都指向这个唯一的实例。这种模式在Java中广泛应用于配置管理...

    java23种设计模式代码实例讲解

    本资源包含了23种经典的Java设计模式的代码实例,对于正在学习Java的开发者来说,是提升理解和应用设计模式能力的重要资料。 1. 单例模式(Singleton):确保一个类只有一个实例,并提供一个全局访问点。在Java中,...

    设计模式大作业.zip

    在IT行业中,设计模式是软件开发中的重要概念,它们代表了在特定情境下解决常见问题的最佳实践。在“设计模式大作业.zip”这个压缩包中,我们看到了一系列使用了多种设计模式实现的代码示例,这包括简单工厂模式、...

    实例解析labview 设计模式

    在LabVIEW编程中,设计模式是解决常见问题的可复用解决方案,可以提高代码的可读性、可维护性和效率。本篇文章将深入探讨三种重要的LabVIEW设计模式:生产消费者模式、事件状态机和状态机模式。 ### 生产消费者模式...

    设计模式实例

    在这个“设计模式实例”中,我们将深入探讨设计模式的实用性和应用。 首先,设计模式可以分为三类:创建型模式、结构型模式和行为型模式。创建型模式关注对象的创建,如单例模式(Singleton)、工厂模式(Factory ...

Global site tag (gtag.js) - Google Analytics