如何理解Java知识点中的常见设计模式

这期内容当中小编将会给大家带来有关如何理解Java知识点中的常见设计模式,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

创新互联专注于西峰企业网站建设,响应式网站建设,购物商城网站建设。西峰网站建设公司,为西峰等地区提供建站服务。全流程按需策划设计,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务

一. 观察者模式

观察者模式用一句话描述就是当一个类的对象(被观察者)的状态发生改变时同时其他依赖于它的对象(观察者)的状态也做相应的改变(做相应的动作)。

具体实现流程:

  • 定义观察者抽象类,该抽象类中有一个被观察者的成员变量,还有一个update方法用于在被观察者发生改变时通知观察者类,实例化观察者类时将被观察者实例传递进来,这样当被观察者调用观察者的update方法后观察者就可以通过自己的被观察者成员变量访问到被观察者改变之后的状态

  • 定义被观察者,其含有一个list,用来存储若干个观察者的实例,暴露出增加、删除编辑观察者的方法,当其状态发生改变时遍历调用list中观察者对象的update方法通知观察者们

java在java.util库里面,提供了一个Observable类和一个Observer接口,在Observer接口中只提供了一个update方法,被观察者通过调用该方法通知观察者自己的状态发生了改变。Observable类我们提供了对于观察者添加,删除,通知观察者改变等方法。当我们的需要通知观察者并且需要调用观察者update方法,我们需要调用setChanged方法。

在Android中对于观察者模式使用的场景有很多。例如BroadcastReceiver,Eventbus,RxJava等等都采用了观察者模式。

二. 适配器模式

作为两个不兼容的接口之间的桥梁,它结合了两个独立接口的功能。 这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。 注意,要点是要在原来类的基础上使原本不兼容的功能变得兼容。 Adapter类一般是用来实现与原有类不兼容的功能,比如demo中的MediaAdapter实现了MediaPlayer没有的特殊功能,用户只要调用AudioPlayer中的play方法,AudioPlayer会自动根据音频的类型选择不同的play方式,当音频类型不符合传统player的能力时AudioPlayer会使用adapter去调用之前不兼容的方法(功能),这样就实现了所谓的适配。

三. 代理模式

具先实现其实也很简单,就是一个代理类将别代理类包裹起来,只对外界暴露调用被代理类方法的方法,从而实现代理模式,需要特别注意的是代理模式和适配器模式的区别: 适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口 ,和装饰器模式的区别: 装饰器模式为了增强功能,而代理模式是为了加以控制 。

四. 工厂方法模式

工厂方法模式其实就是当一个类的实例化依赖于不同场景时需要使用的,比如上面demo,根据不同的形状,实例化的Shape对象内部的实现逻辑不一样,这时候就可以使用工厂方法模式,将类内部的实现细节隐藏起来,用户只需要告诉工厂类自己需要什么情况下的产品,工厂就可以自动调用自己内部对应场景的代码从而返回一个用户需要的“产品”。

五. 抽象工厂模式

对比工厂方法模式,因为一个工厂只能生产一个产品,比如一个ShapeFactory只能根据不同情况实例化不同的Shape,那么当我们需要一整套的产品(比如形状和颜色形成了一套产品)时使用工厂方法显然就不能解决了,所以就需要抽象工厂模式,抽象工厂模式实际上是工厂的工厂,即其作用的目的是为了实例化不同的工厂,用户再通过不同的工厂实例化不同场景下成套的产品。

六. 单例模式

单例模式通俗来讲就是让一个类在整个程序中只有一个对象。

七. 命令模式

命令模式实质上就是将命令抽象到一个具体的类中,即这个类是专门去执行某个命令的,比如demo中,SellStock就是专门执行sell这个命令的,当用户需要sell的时候只要实例化SellStock然后excute就可以完成sell,还有一个比较常用的例子是GUI开发中按钮(button)的作用,每一个按钮都是一个对象,当用户点击某个按钮后就会触发一个相应的命令,用户看到的是点击按钮产生效果,而代码层面上是实例化的按钮对象执行类似于demo中的excute方法完成自己的“命令”。

上述就是小编为大家分享的如何理解Java知识点中的常见设计模式了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。


新闻名称:如何理解Java知识点中的常见设计模式
网站路径:http://myzitong.com/article/gesejp.html