- 1、本文档共61页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
【java总结】设计模式详解
Java设计模式,是一套由前人总结的,被反复使用的代码设计经验。它为我们解决一些实际问题提供了一些很好的设计模板,了解设计模式,有利于提高我们的代码设计能力,架构能力,更有可能自己能够设计出适合业务的一套设计模式。接下来就让我们了解一下这些神秘的设计模式。
总的来说,设计模式可以分为以下几大类。
创建型模式:
属于创建型模式的设计模式有单例模式,简单工厂模式,工厂方法模式,抽象工厂模式,原型模式,建造者模式。这些模式都是用来创建对象的,提供了方便的接口给客户端使用。创建型模式将对象的创建和使用分离,在使用对象时无需关心对象的创建细节,从而降低系统的耦合度,让设计方案更易于修改和扩展。
结构型模式:
属于结构型模式的设计模式有适配器模式,桥接模式,组合模式,装饰模式,外观模式,享元模式,代理模式。他们大多是用来组织某种结构,提供某种复杂的功能,不同的结构型模式关注如何将现有类或对象组织在一起形成更加强大的结构。比如适配器提供了将两个毫不相关的类或接口提供了桥梁,组合模式为树形结构提供了模板,外观模式为客户提供了方便简洁的接口,并且隐藏了内部细节。
行为型模式:
属于行为型模式的设计模式有职责链模式,命令模式,解释器模式,迭代器模式,中介者模式,备忘录模式,观察者模式,状态模式,策略模式,模板方法模式,访问者模式。这些模式为客户端提供了许多功能需求,注重对象之间的交互,关注他们之间的相互作用和职责划分。比如策略模式为用户提供了不同的策略选择,观察者模式,使得某个事件发生过后可以自动触发其他事件。又比如备忘录模式,使得用户可以恢复之前的某个状态,实现还原的功能。
接下来我们一个一个来看这些设计模式。
创造型模式
单例模式
需求:系统需要有一个恒定不变的对象,每次获取都是同一个对象。比如一个朝代只能有一个皇帝,一个公司只能有一个老板。那我们的系统就不能new出两个老板对象出来。windows系统的任务管理器便是实现了单例模式。
特点:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。而单例模式又分为两类,懒汉式和饿汉式。
饿汉式单例即一开始就new出一个实例,始终占据着内存,不管他以后是不是被用到。优点是不用考虑多线程的问题。
代码如下
[java] view plain copy 在CODE上查看代码片派生到我的代码片
public class EagerSingleton {
privatestatic final EagerSingleton instance=new EagerSingleton();
privateEagerSingleton(){}
publicstatic EagerSingleton getInstance(){
returninstance;
}
}
懒汉式单例即等到该对象第一次被使用时才new出一个实例,避免了一开始就占用资源。缺点是考虑多线程情况下同时new出多个实例的问题,需要使用锁,在多线程并发访问环境下会导致性能下降。
代码如下
[java] view plain copy 在CODE上查看代码片派生到我的代码片
public class LazySingleton {
privatestatic LazySingleton instance=null;
private LazySingleton(){}
synchronizedpublic static LazySingleton getInsatance(){
if(instance==null)instance =new LazySingleton();
returninstance;
}
}
IoDH(Initializationon Demand Holder):即有延迟加载,又保证线程安全,不影响系统性能。缺点是与编程语言本身特性相关,java中可以实现,但很多面向对象语言不支持。
[java] view plain copy 在CODE上查看代码片派生到我的代码片
public class IoDH {
privateIoDH(){}
privatestatic class HolderClass{
privatefinal static IoDH instance =new IoDH();
}
publicstatic Io
文档评论(0)