`

从spring开始--002

 
阅读更多

单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点。

 

 

 几种经典的实现方式

package com.ghods.lesson1.designpattern.singleton;

/**
 * 线程安全的 懒汉模式
 */
public class Singleton {
	private Singleton() {
	}

	private static Singleton instance;

	public static synchronized Singleton getInstance() {
		if (instance == null) {
			instance = new Singleton();
		}
		return instance;
	}
}

/**
 * 饿汉模式
 */
class Singleton2 {
	private Singleton2() {
	}

	private static Singleton2 instance = new Singleton2();

	public static Singleton2 getInstance() {
		return instance;
	}
}

/**
 * 双重校验锁 的懒汉模式
 */
class Singleton3 {
	private Singleton3() {
	}

	private static Singleton3 singleton = null;

	public static Singleton3 getInstance() {
		if (singleton == null) {
			synchronized (Singleton3.class) {
				if (singleton == null) {
					singleton = new Singleton3();
				}
			}
		}
		return singleton;
	}
}

 推荐blog文章:http://www.blogjava.net/kenzhh/archive/2013/07/05/357824.html

 Prototype(原型模式):用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。

 

package com.ghods.lesson1.designpattern.prototype;

/**
 * 抽象原型角色
 */
public abstract class Prototype implements Cloneable {
	private A a;

	public A getA() {
		return a;
	}

	public void setA(A a) {
		this.a = a;
	}

	/**
	 * 克隆自身方法
	 * 
	 * @return
	 */
	public Object clone() throws CloneNotSupportedException {
		return super.clone();
	}

}

class A {
        public A(){}
	public A(String str) {
		this.str = str;
	}

	private String str = "默认值";

	public String getStr() {
		return str;
	}

	public void setStr(String str) {
		this.str = str;
	}
}

 

 

package com.ghods.lesson1.designpattern.prototype;

/**
 * 具体原型实现
 */
public class ConcretePrototype extends Prototype{
    
    public static void main(String [] args) throws CloneNotSupportedException{
        Prototype prototype = new ConcretePrototype();
        prototype.setA(new A("原型的值"));
        ConcretePrototype concretePrototype1 = (ConcretePrototype) prototype.clone();
        //将会输出‘原型的值’,而不是‘默认值’;因此这是浅复制
        System.out.println(concretePrototype1.getA().getStr());
    }
}

 如果需要深度复制,当然需要重写Prototype的clone方法了。

 

	public Object clone() throws CloneNotSupportedException {
		this.a = new A();
		return super.clone();
	}

 

其它设计模式可以参见《Design Patterns: Elements of Reusable Object-Oriented Software》(即后述《设计模式》一书),由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合著(Addison-Wesley,1995)。这几位作者常被称为"四人组(Gang of Four)",而这本书也就被称为"四人组(或 GoF)"书。

 


 

 

  • 大小: 4.7 KB
分享到:
评论

相关推荐

    Spring视频教程(1)

    “002_Spring架构概述.avi”将深入探讨Spring的模块结构,包括核心容器、AOP(面向切面编程)、数据访问/集成、Web、工具和支持等模块。理解这些模块的功能和相互关系对于后续的学习至关重要。 接着,“003_Spring...

    spring2.5基于注解开发教程

    自Spring 2.5版本起,该框架开始支持基于注解的配置,这一特性极大地减少了开发人员对于XML配置文件的依赖,同时也提高了代码的内聚性和可读性。 #### 注解配置的优势 注解配置相对于传统的XML配置具备许多优势: ...

    itis-info-2021-spring

    【标题】"itis-info-2021-spring" 指的是一个可能与信息技术相关的项目或课程,可能是在2021年春季开展的。...如果你打算深入研究,建议从阅读源代码和理解项目结构开始,然后逐步探索每个组件的功能和实现。

    JAVA基础面试,SpringCloud面试题

    1. **排除法**:首先找出所有分数小于等于80分的学生,然后从所有学生中排除这些学生。 ```sql SELECT DISTINCT name FROM grade WHERE name NOT IN (SELECT DISTINCT name FROM grade WHERE score ); ``` 2. **...

    weixin002家庭记账本的设计与实现+ssm.rar

    在当今社会,随着家庭财务管理意识的增强,越来越多的人开始关注记账软件的使用。为了满足用户的需求,各种记账软件应运而生,其中不乏优秀的设计与实现案例。本文所讨论的“weixin002家庭记账本的设计与实现+ssm”...

    毕业设计springboot002基于springboot的医护人员排班系统源代码数据库文档

    本系统还提供了完整的源代码、数据库备份文件(db.sql)、配套文档以及视频教程,方便用户从零开始学习和搭建自己的排班系统。源代码是开发人员理解系统功能和学习Spring Boot框架的重要资源,数据库备份文件则用于...

    项目流程管理系统接口协议文档1

    - 002:专家评分 - 003:决策委员会评审 - 004:部门经理评审 - 005:待修改 - 006:结项 这些状态反映了项目从提交到结束的完整生命周期。 2. **用户角色**: - **项目经理**:负责提交项目申请、周期性...

    java机试题整理

    - 从原数组末尾开始向前遍历,将每个元素添加到新数组的前端位置。 **4. 集合倒序** 未提供具体代码,但可以参考以下实现方式: ```java public static List<Object> reverseList(List<Object> list) { ...

    【计算机王程序设计项目源码】ssm002基于SSM的手机商城管理系统的设计与实现.zip

    对于初学者来说,它提供了一个从零开始构建项目的全流程体验,从需求分析到系统设计,再到编码实现和测试验证,每一个环节都是宝贵的实战经验。而对于进阶学习者,本项目可以作为一个模块化、功能齐全的案例,帮助...

    【计算机程序设计项目源码】springboot002旅游网站.zip

    它能够帮助开发者理解并实现一个完整的Web应用程序从无到有的过程,从基础的搭建环境开始,到实际的代码编写、功能实现和最终的测试部署。 除了上述提到的技术细节,该源码还能够作为毕业设计项目、课程设计、大...

    深入浅出Istio Service Mesh快速入门与实践-高清-完整目录-2019年3月

    Spring Cloud 是一个基于 Spring Boot 的框架,用于简化开发分布式系统的服务。它提供了构建云原生应用所需的工具,包括配置管理、服务发现、断路器、智能路由、微批处理、控制总线等。Spring Cloud 在服务网格概念...

    XML编程dom4j

    - **事件处理**:如何利用SAX解析器处理XML事件,如开始文档、结束文档、开始元素、结束元素等。 - **XML Schema验证**:如何使用DOM4J的SchemaFactory类进行XML文档的验证。 通过实践DOM4J提供的各种功能,你可以...

Global site tag (gtag.js) - Google Analytics