`
wzucxd
  • 浏览: 25276 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

23种设计模式示例(学习整理中)

 
阅读更多

1.singleton(单例模式,有些地方称为单身模式):保证一个类只有一个实例对象,并提供访问这个实例的全局访问点。

当然实例可以在静态代码块、属性、方法、构造函数中进行初始化,建议使用静态代码块的方式创建实例。

1.1通过静态代码块创建

1.2 通过属性创建唯一实例

1.3 通过方法创建

1.4通过构造函数创建

1.5 1.3改进,线程同步

ps:这4种方式的单例模式中1.1最好,1.1利用静态代码块只初始化一次的特性实现,通过getInstance()获得实例不需要判断实例是否存在即可获得唯一实例对象,相对于另外几种来说效率上也会更好;1.2通过属性创建唯一实例,这种方法的特点是在属性中用final修饰静态属性来保证实例只初始化一次,有些地方也称这种模式为醉汉式singleton;1.3的这种实例也成为懒汉式singleton,这种情况存在线程安全问题,在多线程的环境下初始化实例可能会存在这种情况:当2个线程都执行到singleton=new Singleton_Method();这时实例并未创建,虽然最终可以获得同一个实例对象,但是这样就使得实例创建过2次,最近一次覆盖了以前的实例。可以采用synchronized进行线程同步,如1.5,线程同步后的代价会使得效率比1.3更差;1.4和1.3差不多,但是1.4需要通过new对象后再调用方法来获得唯一实例(newSingleton_Con().getInstance();),而且不安全。

singleton被不同的classload装载的时候还是无法获得同一个实例对象的。


2.simple_factory

提供一个创建对象的方法,根据传入类型决定实例化哪个对象

Fruit.java Fruit_Interface

Apple.java Apple implements Fruit

Banana.java Banana implements Fruit

FruitFactory.java

Test.java

ps:这个模式存在问题:当增加一种水果的时候,就要修改水果工厂(FruitFactory.java)中生产水果的方法(加上对应的创建水果实例代码)


3.factory_method

定义一个用于创建对象的接口,让子类决定把哪一个类进行实例化。

Fruit.java//水口接口

Apple.java//Apple implements Fruit

Banana.java//Banana implements Fruit

FruitFactory.java//水果工厂接口

create apple and banana's FruitFactory

AppleFactory.java//AppleFactory implements FruitFactory,example:AppleFactory

Test.java

ps:factory_mathod存在的问题:假设如果有1000种"水果",那么就需要1000个"水果工厂"

分享到:
评论

相关推荐

    Java23种基本的设计模式整料整理学习源码示例zip

    Java23种基本的设计模式整料整理学习源码示例zip Java23种基本的设计模式整料整理学习源码示例zip Java23种基本的设计模式整料整理学习源码示例zip Java23种基本的设计模式整料整理学习源码示例zip 设计模式的六大...

    java设计模式电子书(含示例代码)

    本人在eclipse下自学设计模式过程中整理的资料,一个eclipse的工程下面分包写了java设计模式的示例代码,每个包是一个设计模式的代码。webcontent文件夹下放有两本java设计模式的电子书(doc和pdf)。

    设计模式代码示例及详细讲解

    设计模式学习经典示例,附中文详细讲解html,让你轻松在vs2010环境下测试和查看。花了不少时间来整理,感谢大家的支持!

    设计模式学习卡片

    我搜集整理的设计模式学习卡片。卡片信息包括每个设计模式的说明,应用场景,UML类图,部分模式包括示例代码,网络优秀文章对该模式的解读。 该卡片打开方式为Anki,非常推荐的一个学习工具,可以以科学的方式学习新...

    设计模式整理

    对《设计模式》的整理,便于梳理。对23个设计模式中的每一个均从意图、适用场景、代码示例出发,便于快速理解。

    Design Patterns Explained(设计模式解析英文版)

    解释了各个设计模式是如何总结整理出来的,并给出了具体的应用示例。所用的英文语句简单易懂。 <br/>【内容简介】 本书讲述了作者在学习设计模式过程中所积累的个人经验。书中包含很多实际的和可应用的实例...

    spring-boot示例项目

    redis(redis缓存)、quartz(集群任务实现)、shiro(权限管理)、oauth2(四种认证模式)、shign(接口参数防篡改重放)、encoder(用户密码设计)、actuator(服务监控)、cloud-config(配置中心)、cloud-gateway...

    Android源码设计模式分析项目.zip

    这部分内容包含了多个精心设计的Android项目案例,从需求分析、设计思路到实现过程,都有详细的讲解和代码示例。学习者可以通过实际操作,深入了解Android开发的整个流程,提升自己的实战能力。 此外,我们还提供了...

    asp.net知识库

    2.0正式版中callback的一些变化+使用示例(ASP.NET 2.0) Server Side ViewState 在服务器端存贮ViewState (ASP.NET 2.0) VS2005 ASP.NET本地化学习笔记&感受 在自定义Server Control中捆绑JS文件 Step by Step ...

    VB教程:组合框控件的设计与实现

    本文针对当前高校程序设计类课程传统教学模式的弊端,以建构主义学习理论、自主学习理论等学习理论作为理论基础,以教学系统设计理论和软件工程理论作为理论支撑,根据本校《Visual Basic程序设计》课程(以下简称VB)的...

    Java学习笔记-个人整理的

    {2.8}框架中移动的小球}{59}{section.2.8} {2.9}抽象与接口}{59}{section.2.9} {2.10}访问控制}{60}{section.2.10} {2.10.1}类的属性}{60}{subsection.2.10.1} {2.10.2}类的方法}{61}{subsection.2.10.2} {...

    webdgs.rar计算机资料包

    webdgs.rar是一个精心整理的计算机专业JSP源码资料包,旨在为学习Java Server Pages (JSP) 技术的学者和开发者提供丰富的实践资源。...对于希望深入学习MVC设计模式的用户,webdgs.rar同样不会让你失

    2023最新Java面试题面试经验笔记项目

    202面试题,Java面试题、JVM面试题、多线程面试题、并发编程、设计模式面试题、Spring面试题、MyBatis面试题、ZooKee 一、内容概览 本次分享的资源涵盖了Java面试的各个方面,从基础知识到高级技术,从数据库到...

    099_《Delphi5专题开发指南》(2/4)

    另一方面,集中阐述了几类常用的Delphi应用程序,并以大量示例介绍数据库应用程序、Internet应用程序的常用设计方法及设计模式。本书以介绍Delphi 5.0的新特性为中心,力求使用读者把握Delphi发展的新动向,灵活使用...

    099_《Delphi5专题开发指南》(4/4)

    另一方面,集中阐述了几类常用的Delphi应用程序,并以大量示例介绍数据库应用程序、Internet应用程序的常用设计方法及设计模式。本书以介绍Delphi 5.0的新特性为中心,力求使用读者把握Delphi发展的新动向,灵活使用...

    099_《Delphi5专题开发指南》(1/4)

    另一方面,集中阐述了几类常用的Delphi应用程序,并以大量示例介绍数据库应用程序、Internet应用程序的常用设计方法及设计模式。本书以介绍Delphi 5.0的新特性为中心,力求使用读者把握Delphi发展的新动向,灵活使用...

    099_《Delphi5专题开发指南》(3/4)

    另一方面,集中阐述了几类常用的Delphi应用程序,并以大量示例介绍数据库应用程序、Internet应用程序的常用设计方法及设计模式。本书以介绍Delphi 5.0的新特性为中心,力求使用读者把握Delphi发展的新动向,灵活使用...

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料;本资料仅用于学习。 【课程内容】 第1周 开课介绍 python发展介绍 第一个python程序 变量 字符编码与二进制 字符编码的区别与介绍 用户交互程序 if ...

    这是一个融入了MVP模式,集成了多个开源项目后,进行整合形成的Android快速开发框架。.zip

    这部分内容包含了多个精心设计的Android项目案例,从需求分析、设计思路到实现过程,都有详细的讲解和代码示例。学习者可以通过实际操作,深入了解Android开发的整个流程,提升自己的实战能力。 此外,我们还提供了...

    C++游戏编程快速入门视频教程 高清不加密

    1.2 学习游戏设计的要素 1.2.1 提出基本思想 1.2.2 整理剧情 1.2.3 可视化图形 1.2.4 为游戏选择正确的声音 1.2.5 使用控制器控制游戏 1.2.6 确定游戏模式 1.3 面向对象的编程和游戏 1.3.1 理解OOP ...

Global site tag (gtag.js) - Google Analytics