单例模式(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)"书。
相关推荐
“002_Spring架构概述.avi”将深入探讨Spring的模块结构,包括核心容器、AOP(面向切面编程)、数据访问/集成、Web、工具和支持等模块。理解这些模块的功能和相互关系对于后续的学习至关重要。 接着,“003_Spring...
自Spring 2.5版本起,该框架开始支持基于注解的配置,这一特性极大地减少了开发人员对于XML配置文件的依赖,同时也提高了代码的内聚性和可读性。 #### 注解配置的优势 注解配置相对于传统的XML配置具备许多优势: ...
【标题】"itis-info-2021-spring" 指的是一个可能与信息技术相关的项目或课程,可能是在2021年春季开展的。...如果你打算深入研究,建议从阅读源代码和理解项目结构开始,然后逐步探索每个组件的功能和实现。
1. **排除法**:首先找出所有分数小于等于80分的学生,然后从所有学生中排除这些学生。 ```sql SELECT DISTINCT name FROM grade WHERE name NOT IN (SELECT DISTINCT name FROM grade WHERE score ); ``` 2. **...
在当今社会,随着家庭财务管理意识的增强,越来越多的人开始关注记账软件的使用。为了满足用户的需求,各种记账软件应运而生,其中不乏优秀的设计与实现案例。本文所讨论的“weixin002家庭记账本的设计与实现+ssm”...
本系统还提供了完整的源代码、数据库备份文件(db.sql)、配套文档以及视频教程,方便用户从零开始学习和搭建自己的排班系统。源代码是开发人员理解系统功能和学习Spring Boot框架的重要资源,数据库备份文件则用于...
- 002:专家评分 - 003:决策委员会评审 - 004:部门经理评审 - 005:待修改 - 006:结项 这些状态反映了项目从提交到结束的完整生命周期。 2. **用户角色**: - **项目经理**:负责提交项目申请、周期性...
- 从原数组末尾开始向前遍历,将每个元素添加到新数组的前端位置。 **4. 集合倒序** 未提供具体代码,但可以参考以下实现方式: ```java public static List<Object> reverseList(List<Object> list) { ...
对于初学者来说,它提供了一个从零开始构建项目的全流程体验,从需求分析到系统设计,再到编码实现和测试验证,每一个环节都是宝贵的实战经验。而对于进阶学习者,本项目可以作为一个模块化、功能齐全的案例,帮助...
它能够帮助开发者理解并实现一个完整的Web应用程序从无到有的过程,从基础的搭建环境开始,到实际的代码编写、功能实现和最终的测试部署。 除了上述提到的技术细节,该源码还能够作为毕业设计项目、课程设计、大...
Spring Cloud 是一个基于 Spring Boot 的框架,用于简化开发分布式系统的服务。它提供了构建云原生应用所需的工具,包括配置管理、服务发现、断路器、智能路由、微批处理、控制总线等。Spring Cloud 在服务网格概念...
- **事件处理**:如何利用SAX解析器处理XML事件,如开始文档、结束文档、开始元素、结束元素等。 - **XML Schema验证**:如何使用DOM4J的SchemaFactory类进行XML文档的验证。 通过实践DOM4J提供的各种功能,你可以...