java设计模式

来源:互联网 发布:手机一直恢复系统数据 编辑:程序博客网 时间:2024/05/16 08:29

http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html

静态工厂模式:用静态工厂创建一个接口的不同实现类的实例   

抽象工厂模式: 给定一个接口a和他的实现类b,对应写一个工厂的接口用来创建接口a,同时实现工厂接口,即创建b的实例的工厂。这样的好处是,每当新创建一个实现类就可以                         给出一个对应的工厂,不需要修改原来的代码,扩展性好

单例模式:为了防止并发错误,采取内部类来完成单例模式   首先私有化构造器,getInstance负责返回唯一实例,该方法返回内部工厂类中的实例。工厂类是静态的,其中只有一                   个静态变量(用私有构造器生成的实例),因此,这个实例只有在初次调用的时候会初始化,此后不会再生成新的实例。

Builder模式:创建一个Builder类,其中有一个容器变量,以及构造其他实例的方法,传入参数n,方法会创建n个实例并添加到容器上。

                      还有一种builder是针对创建构造器需要很多参数的类,详见《Effective Java》


浅复制:将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的。

深复制:将一个对象复制后,不论是基本数据类型还有引用类型,都是重新创建的。简单来说,就是深复制进行了完全彻底的复制,而浅复制不彻底。

复制一个类:实现cloneable接口(空接口),super.clone()浅复制, 二进制流深复制


适配器模式:客户端有一个类,需要借助这个类来实现一个目标接口,但是目标接口中的方法没有被这个类实现,则需要扩展这个类来达到兼容效果。

                     两种方法:1.继承这个类同时实现接口   2.包装这个类同时实现接口(在新的类中初始化一个上述类的对象)

                     对接口的适配:首先用一个抽象类实现接口,然后再实现抽象类

                     总的来说,适配模式就是将一个未能完全实现目标接口的类或者对象进行扩展达到兼容效果,实现旧接口到新接口的转换

                    接口的适配其实是一个实现接口的便捷方法,思想类似于骨架类


装饰模式: 装饰类和被装饰类同时实现一个接口,装饰类的实现方法其实是调用了被装饰类的方法同时添加了一些装饰功能。装饰类中封装了被装饰类


代理模式:类似于装饰模式,不同的是装饰模式是动态的(通过被装饰的对象来创建一个新的装饰对象)


*代理模式和装饰模式的主要区别:代理模式用于控制访问,在代理类中事先封装了一个实现类的对象,一切操作都是基于这个对象进行的,客户端无感知

                                                       装饰模式中,客户端将一个被装饰类的对象作为参数传入装饰类,达到动态装饰的效果

                  http://www.cnblogs.com/jaredlam/archive/2011/11/08/2241089.html


外观模式: 将不同的组件分别放在不同的类中实现,最后统一用一个类将这些组件组合起来,以达到解耦的目的,类似于spring的配置文件


桥接模式:一个接口A有多个实现,通过一个bridge来达到对不同实现调用的效果,jdbc对不同数据库的实现提供了统一接口一样

                 bridge中封装一个接口A的对象,所有的操作都是通过A来进行操作的(统一接口)。客户端通过对bridge进行配置或者set来改变其中的接口对象实现。


策略模式:提供统一的接口,不同的实现。策略模式的决定权在用户,系统本身提供不同算法的实现,新增或者删除算法,对各种算法做封装。因此,策略             模式多用在算法决策系统中,外部用户只需要决定用哪个算法即可。 java8的流式编程中大量使用了策略模式

           接口的实现可以不提前写,客户端现场实现(内部类,lamda等)


样板方法模式: 类似于骨架类,在一个抽象类中将大部分实现写好,同时提供未实现的抽象方法。在继承类中实现抽象方法,同时可以改写原有方法。


观察者模式: RxJava  / 被观察者储存了一个观察者的列表,可以添加删除观察者,同时再进行某些操作后可以通知观察者。观察者收到信息后调用自身方法进行操作

                      RxJava不是这么实现的,注意。 RxJava采用的是发射源和接收源的思想,被观察者发射数据,接收源接收数据并调用自身方法进行操作

                      发射源可以通过数据源创建,也可以自己创建一系列的计划表


迭代器模式: 自定义一个集合和一个迭代器,迭代器类中封装集合,并且提供迭代方法,包括前一个下一个,pos等。 集合提供get set等操作


责任链模式: 有一个接口Handler,提供一个operate方法。 提供一个抽象类MyHandler,封装一个Handler,并提供get,set。 

                       实现类继承了抽象类并实现接口,这样实现类本身是一个Handler,同时还持有另一个Handler。当一个请求到达Handler时,他根据具体情境判断是自己实现还                           是将请求传递给下一个Handler。传递的方式可以是顺序的,或树,或环等


命令模式:  命令模式的核心思想是解耦。他由三部分组成,命令发起者(invoker),命令(command),命令接收者(receiver).

                    receiver的核心方法是action,即执行一个动作。 command的核心方法是exe,让receiver执行action,所以command一般持有receiver对象

                   invoker的核心方法也是action,即发出命令(执行command的核心方法),所以invoker持有command对象。

                   这样当invoker执行action方法后,receiver会收到命令并进行相应的动作


其他模式用的不多,需要时可参考链接文章










原创粉丝点击