java 几种常见的简单设计模式

前言:

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。用于解决特定环境下、重复出现的特定问题的解决方案。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。(引用---点击打开链接

一、单例模式(Singleton Pattern)

a、单例模式:是一种常见的设计模式。为了保证一个类在内存中只能有一个对象。

思路:1、如果其他程序能够随意用new创建该类对象,那么就无法控制个数。因此,不让其他程序用new创建该类的对象。

2、既然不让其他程序new该类对象,那么该类在自己内部就要创建一个对象,否则该类就永远无法创建对象了。

3、该类将创建的对象对外(整个系统)提供,让其他程序获取并使用。

步骤:1、将该类中的构造函数私有化。

2、在本类中创建一个本类对象。

3、定义一个方法,返回值类型是本类类型。让其他程序通过该方法就可以获取到该类对象。

单例模式中又有:饿汉式和懒汉式两种

1、饿汉式:不管你需不需要,都在类内部直接先生成一个对象。因为构造方法为私有的,所以外面无法new新的对象,只能通过getInstance来获得这个唯一的对象,从而实现单例模式

[java] view
plain
copyprint?

  1. /*饿汉式*/
  2. public class Single {
  3. private static final Single s=new Single();
  4. private Single(){
  5. }
  6. public static Single getInstance(){
  7. return s;
  8. }
  9. }

2、懒汉式:与饿汉式不同之处在于,不是直接生成一个对象,而是在需要对象是才会生成,也就是只有当调用getInstance这个方法是才会产生这个唯一对象。(也可以说是单例的延迟加载方式)

[java] view
plain
copyprint?

  1. /*懒汉式*/
  2. public class Single2 {
  3. private static Single2 s;
  4. private Single2(){
  5. }
  6. public static Single2 getInstance(){
  7. if(s==null){
  8. s = new Single2();
  9. }
  10. return s;
  11. }
  12. }

这个类可以满足基本要求,但是,像这样毫无线程安全保护的类,如果我们把它放入多线程的环境下,肯定就会出现问题了(问题就是假如有多个线程同时到达if(s==null)时,这个条件都成立,那么就会产生多个对象了,就违背了我们的本意),如何解决?我们首先会想到对getInstance方法加synchronized关键字。所以该为下面这句即可。

http://hi.680.com/8753180

http://hi.680.com/8753191

http://hi.680.com/8753198

http://hi.680.com/8753201

http://hi.680.com/8753204

http://hi.680.com/8753212

http://hi.680.com/8753221

http://hi.680.com/8753224

http://hi.680.com/8753227

http://hi.680.com/8753234

http://hi.680.com/8753240

http://hi.680.com/8753246

http://hi.680.com/8753249

http://hi.680.com/8753255

http://hi.680.com/8753261

http://hi.680.com/8753267

http://hi.680.com/8753276

http://hi.680.com/8753285

http://hi.680.com/8753291

http://hi.680.com/8753297

http://hi.680.com/8753303

http://hi.680.com/8753315

http://hi.680.com/8753321

http://hi.680.com/8753327

http://hi.680.com/8753333

http://hi.680.com/8753339

http://hi.680.com/8753346

http://hi.680.com/8753352

http://hi.680.com/8753358

http://hi.680.com/8753364

http://hi.680.com/8753370

http://hi.680.com/8753376

http://hi.680.com/8753385

http://hi.680.com/8753391

http://hi.680.com/8753394

http://hi.680.com/8753400

http://hi.680.com/8753406

http://hi.680.com/8753412

http://hi.680.com/8753418

http://hi.680.com/8753424

http://hi.680.com/8753430

http://hi.680.com/8753436

http://hi.680.com/8753442

http://hi.680.com/8753448

http://hi.680.com/8753454

http://hi.680.com/8753460

http://hi.680.com/8753466

http://hi.680.com/8753473

http://hi.680.com/8753479

http://hi.680.com/8753483

http://hi.680.com/8753489

http://hi.680.com/8753495

http://hi.680.com/8753501

http://hi.680.com/8753507

http://hi.680.com/8753513

http://hi.680.com/8753516

http://hi.680.com/8753522

http://hi.680.com/8753528

http://hi.680.com/8753534

http://hi.680.com/8753540

http://hi.680.com/8753546

http://hi.680.com/8753553

http://hi.680.com/8753559

http://hi.680.com/8753565

http://hi.680.com/8753572

http://hi.680.com/8753581

http://hi.680.com/8753587

http://hi.680.com/8753593

http://hi.680.com/8753599

http://hi.680.com/8753605

http://hi.680.com/8753611

http://hi.680.com/8753617

http://hi.680.com/8753623

http://hi.680.com/8753629

http://hi.680.com/8753635

http://hi.680.com/8753641

http://hi.680.com/8753647

http://hi.680.com/8753653

http://hi.680.com/8753659

http://hi.680.com/8753665

http://hi.680.com/8753671

http://hi.680.com/8753677

http://hi.680.com/8753683

http://hi.680.com/8753689

http://hi.680.com/8753699

http://hi.680.com/8753706

http://hi.680.com/8753712

http://hi.680.com/8753718

http://hi.680.com/8753724

http://hi.680.com/8753730

http://hi.680.com/8753739

http://hi.680.com/8753745

http://hi.680.com/8753751

http://hi.680.com/8753757

http://hi.680.com/8753763

http://hi.680.com/8753769

http://hi.680.com/8753775

http://hi.680.com/8753784

http://hi.680.com/8753790

http://hi.680.com/8753796

http://hi.680.com/8753799

http://hi.680.com/8753805

http://hi.680.com/8753811

http://hi.680.com/8753817

http://hi.680.com/8753823

http://hi.680.com/8753829

http://hi.680.com/8753835

http://hi.680.com/8753841

http://hi.680.com/8753848

http://hi.680.com/8753854

http://hi.680.com/8753863

http://hi.680.com/8753869

http://hi.680.com/8753875

http://hi.680.com/8753881

http://hi.680.com/8753887

http://hi.680.com/8753893

http://hi.680.com/8753899

http://hi.680.com/8753902

http://hi.680.com/8753908

http://hi.680.com/8753914

http://hi.680.com/8753921

http://hi.680.com/8753927

http://hi.680.com/8753933

http://hi.680.com/8753939

http://hi.680.com/8753945

http://hi.680.com/8753951

http://hi.680.com/8753957

http://hi.680.com/8753963

http://hi.680.com/8753969

http://hi.680.com/8753979

http://hi.680.com/8753985

http://hi.680.com/8753991

http://hi.680.com/8753997

http://hi.680.com/8754006

http://hi.680.com/8754025

http://hi.680.com/8754037

http://hi.680.com/8754043

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-09 10:33:28

java 几种常见的简单设计模式的相关文章

java之 ------ 几种常见的简单设计模式

前言: 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.用于解决特定环境下.重复出现的特定问题的解决方案.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的

Java几种常见的编码方式

Java综合 几种常见的编码格式 为什么要编码 不知道大家有没有想过一个问题,那就是为什么要编码?我们能不能不编码?要回答这个问题必须要回到计算机是如何表示我们人类能够理解的符号的,这些符号也就是我们人类使用的语言.由于人类的语言有太多,因而表示这些语言的符号太多,无法用计算机中一个基本的存储单元—— byte 来表示,因而必须要经过拆分或一些翻译工作,才能让计算机能理解.我们可以把计算机能够理解的语言假定为英语,其它语言要能够在计算机中使用必须经过一次翻译,把它翻译成英语.这个翻译的过程就是编

JAVA几种常见的编码格式(转)

简介 编码问题一直困扰着开发人员,尤其在 Java 中更加明显,因为 Java 是跨平台语言,不同平台之间编码之间的切换较多.本文将向你详细介绍 Java 中编码问题出现的根本原因,你将了解到:Java 中经常遇到的几种编码格式的区别:Java 中经常需要编码的场景:出现中文问题的原因分析:在开发 Java web 程序时可能会存在编码的几个地方,一个 HTTP 请求怎么控制编码格式?如何避免出现中文问题? 为什么要编码 不知道大家有没有想过一个问题,那就是为什么要编码?我们能不能不编码?要回答

java几种常见的排序算法总结

[java] view plain copy /*************几种常见的排序算法总结***************************/ package paixu; public class PaiXu { final int MAX=20; int num[]=new int[MAX]; { System.out.print("生成的随机数组是:"); for(int i=0;i<20;i++){ num[i]=(int)(Math.random()*100)

五种常见的 PHP 设计模式

内容 设计模式 一书将设计模式引入软件社区,该书的作者是 Erich Gamma.Richard Helm.Ralph Johnson 和 John Vlissides Design(俗称 "四人帮").所介绍的设计模式背后的核心概念非常简单.经过多年的软件开发实践,Gamma 等人发现了某些具有固定设计的模式,就像建筑师设计房子和建筑物一样,可以为浴室的位置或厨房的构造方式开发模板.使用这些模板或者说设计模式 意味着可以更快地设计更好的建筑物.同样的概念也适用于软件. 设计模式不仅代

【转】五种常见的 PHP 设计模式

工厂模式 最初在设计模式 一书中,许多设计模式都鼓励使用松散耦合.要理解这个概念,让我们最好谈一下许多开发人员从事大型系统的艰苦历程.在更改一个代码片段时,就会发生问题,系统其他部分 —— 您曾认为完全不相关的部分中也有可能出现级联破坏. 该问题在于紧密耦合 .系统某个部分中的函数和类严重依赖于系统的其他部分中函数和类的行为和结构.您需要一组模式,使这些类能够相互通信,但不希望将它们紧密绑定在一起,以避免出现联锁. 在大型系统中,许多代码依赖于少数几个关键类.需要更改这些类时,可能会出现困难.例

四种常见的MapReduce设计模式

MapReduce设计模式(MapReduce Design Pattern) 整个MapReduce作业的阶段主要可以分为以下四种: 1.Input-Map-Reduce-Output 2.Input-Map-Output 3.Input-Multiple Maps-Reduce-Output 4.Input-Map-Combiner-Reduce-Output 下面我将一一介绍哪种场景使用哪种设计模式. Input-Map-Reduce-Output Input?Map?Reduce?Out

Java 2种方法实现简单的session超时登出

1.使用拦截器 用户每次和后台交互,如果用户长时间未操作,则需要检测用户的登录状态,这样的场景已经是再正常不过了. 传统的做法可以在每个controller里先判断user的状态,然后再执行业务操作,但这样比较代码不够精简,优雅. 可以使用最简单的拦截器,如: public class LoginInterceptor extends HandlerInterceptorAdapter { private List<String> IGNORE_URI; @Override public bo

对几种常见设计模式的理解

 转自:  http://blog.csdn.net/dengpeng0419/article/details/48110841 设计模式是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 最早提出"设计模式"概念的是建筑设计大师亚力山大Alexander.在1970年他的<建筑的永恒之道>里描述了投计模式的发现,因为它已经存在了千百年之久,而现代才被通过大量的研究而被发现.在<建