当前位置:首页 > 前端设计 > 正文

java常见设计模式及实现 三种设计模式结合的Java程序

java常见设计模式及实现 三种设计模式结合的Java程序

大家好,今天给各位分享java常见设计模式及实现的一些知识,其中也会对三种设计模式结合的Java程序进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关...

大家好,今天给各位分享java常见设计模式及实现的一些知识,其中也会对三种设计模式结合的Java程序进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!

Java中使用了设计模式思想的类有哪些

说起来设计模式,我们每个人都不陌生,多多少少听过「设计模式」的大名。

工作中,我们也一直提及到Java设计模式,那么我们的JDK中又有哪些常见的设计模式呢?

今天我们就来一起说一说。

说起Java设计模式,通俗一点就是前人的经验总结,经由不断演进,形成了一套场景结构设计的一套解决方案。

Java设计模式共有23中涉及模式,总体分为:创建型模式、结构型模式、行为型模式三类。

创建型模式

创建型模式的核心思想就是分装隐藏创建对象的逻辑方式,不让客户端直接通过new创建新对象。该分类下包含:工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式共5种设计模式。

这里举几个例子:

工厂模式:java.util.Calendar#getInstance()

抽象工厂模式:DocumentBuilderFactory

单例模式:java.lang.Runtime#getRuntime()

建造者模式:StringBuilder

原型模式:Object.clone

结构型模式

结构型模式注重类与对象之间的组合,用组合的方式来替代继承。该分类下包含:适配器模式、桥接模式、过滤器模式、组合模式、装饰器模式、外观模式、享元模式、代理模式共8中涉及模式。

这里举典型的例子:

代理模式-java.lang.reflect.Proxy

享元模式:java.lang.Byte#valueOf(byte)

行为型模式

行为型模式关注的是对象之间的通讯交互,共有12中设计模式,责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、空对象模式、策略模式、模版方法模式、访问者模式。

举个栗子:

迭代器模式:java.util.Iterator

观察者模式:java.util.Observer

有人说设计模式是为了弥补Java语言的缺陷,你觉得是这样吗

看你从哪个层面来看待设计模式!

语言层面

如果你从语言层面来看设计模式,那么这个说法可以说是对的。有部分设计模式是弥补了Java语言上的不足,最明显的就是单例模式。

在Java中本身没有提供单例对象的创建,需要通过单例模式来实现,什么饿汉式,懒汉式,多线程下还要关注DCL,volatile关键字等等,衍生了很多的面试题。

而在现代语言中,很多都提供了创建单例对象的语法,比如Scala,Kotlin的object关键字。

代码设计层面

如果从代码设计层面来看,设计模式提供了一套可复用的代码结构,来解决特定问题。比如,当需要动态化某些可选部分时,可以使用策略模式。当需要一组操作来顺序操作某个对象时,可以使用职责链模式。

架构层面

从架构层面来看,设计模式对组件关系进行了解耦。

假设我们要实现一个文件服务器,有一个UploadService来进行上传操作,可以调用ConvertService对文件进行转换。UploadService属于核心模块「上传模块」,而ConvertService属于非核心模块「转换模块」。

如果UploadService直接去调用ConvertService来执行转换,那么核心模块就依赖了非核心模块。如下图:

非核心模块是相对不稳定的,核心模块是相对稳定的。核心模块依赖了非核心模块会导致核心模块也不稳定。所以可以使用策略模式来解耦:

看箭头的方向,现在转换模块依赖于上传模块,转换模块的变化不会影响上传模块。依赖方向改变了,这就是传说中的「依赖倒置」!

java 23种设计模式,一般情况下,常用的有哪些啊

工厂模式,工厂方法模式,单例模式,外观(Facade)模式,观察者(Observer)模式,桥接(Bridge)模式都是比较常用的,不同的项目有不同的设计方向,可以参考的设计模式也不尽相同,没有定数,只是上面这几个模式用的比较多一些。

JAVA为什么要学设计模式

设计模式可以理解为解决一些列问题的经验套路,充分考虑了对应场景的实现方式,扩展性等,用好设计模式就像站在了巨人的肩膀上,而且不用你重复去创造,

spring框架涉及到的设计模式有哪些你如何评价

1.简单工厂,比如说BeanFactory

2.单列模式,spring默认创建的bean都是单列的

3.适配器模式,在springMVC中,SpringMVC中的适配器HandlerAdatper

4.代理模式,比如说AOP

5.模板模式,比如说jdbcTemplate,redisTemplate

这是个人在使用spring框架总结出来的设计模式,我觉得是有关于JAVA面向对象6大原则的问题

你们自己编写的代码中用到了多少设计模式

1、设计模式的六大原则

总原则:开闭原则(OpenClosePrinciple)

开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,而是要扩展原有代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类等,后面的具体设计中我们会提到这点。

1)单一职责原则

不要存在多于一个导致类变更的原因,也就是说每个类应该实现单一的职责,如若不然,就应该把类拆分。

2)里氏替换原则(LiskovSubstitutionPrinciple)

里氏代换原则(LiskovSubstitutionPrincipleLSP)面向对象设计的基本原则之一。里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

3)依赖倒转原则(DependenceInversionPrinciple)

这个是开闭原则的基础,具体内容:面向接口编程,依赖于抽象而不依赖于具体。写代码时用到具体类时,不与具体类交互,而与具体类的上层接口交互。

4)接口隔离原则(InterfaceSegregationPrinciple)

这个原则的意思是:每个接口中不存在子类用不到却必须实现的方法,如果不然,就要将接口拆分。使用多个隔离的接口,比使用单个接口(多个接口方法集合到一个的接口)要好。

5)迪米特法则(最少知道原则)(DemeterPrinciple)

就是说:一个类对自己依赖的类知道的越少越好。也就是说无论被依赖的类多么复杂,都应该将逻辑封装在方法的内部,通过public方法提供给外部。这样当被依赖的类变化时,才能最小的影响该类。

最少知道原则的另一个表达方式是:只与直接的朋友通信。类之间只要有耦合关系,就叫朋友关系。耦合分为依赖、关联、聚合、组合等。我们称出现为成员变量、方法参数、方法返回值中的类为直接朋友。局部变量、临时变量则不是直接的朋友。我们要求陌生的类不要作为局部变量出现在类中。

6)合成复用原则(CompositeReusePrinciple)

原则是尽量首先使用合成/聚合的方式,而不是使用继承。

2、常用模式简析

1)单例模式

单例模式(SingletonPattern)是Java中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

2)工厂模式

工厂模式(FactoryPattern)是Java中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

3)建造者模式(Builder)

建造者模式(BuilderPattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。一个Builder类会一步一步构造最终的对象。该Builder类是独立于其他对象的。

4)适配器模式

适配器模式(AdapterPattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。

这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。

我们通过下面的实例来演示适配器模式的使用。其中,音频播放器设备只能播放mp3文件,通过使用一个更高级的音频播放器来播放vlc和mp4文件。

5)装饰器模式

装饰器模式(DecoratorPattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。

这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。

我们通过下面的实例来演示装饰器模式的用法。其中,我们将把一个形状装饰上不同的颜色,同时又不改变形状类。

6)代理模式

在代理模式(ProxyPattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式,在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。

7)原型模式

原型模式(PrototypePattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。

8)备忘录模式

提供了一种可以恢复状态的机制,实现了信息的封装,使得用户不需要关心状态的保存细节,不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。

9)观察者模式

当对象间存在一对多关系时,则使用观察者模式(ObserverPattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。

10)策略模式

在策略模式(StrategyPattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的context对象。策略对象改变context对象的执行算法。

3、总结设计模式(Designpattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。

关于java常见设计模式及实现,三种设计模式结合的Java程序的介绍到此结束,希望对大家有所帮助。

最新文章