常用的设计模式
简单工厂模式:
1.概述:工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程(new关键字和具体的构造器)隐藏起来,用一个工厂方法来代替,对外提供的只是一个工厂方法,达到提高灵活性的目的。
2.优点:
1.隐蔽了new关键字和构造器
2.降低了这个对象与别的类之间的耦合度,提高了程序的可扩展性
原因:当子类被别的类替换,或者构造器的参数发生变化的时候,只需改动工厂方法内的new即可,改动量降到了最低,而如果不用工厂模式,而是直接用new关键字的话,需要改动的地方就很多了
3.把对象的设计和实现分割开来,从而代码扩展性强、灵活性更高。
3.工厂模式的适用范围:
当遇到下面的情况时,开发人员可以考虑采用工厂模式:
· 在编码时不能预见需要创建哪一种类的实例。
· 一个类使用它的子类来创建对象。
· 开发人员不希望创建了哪个类的实例以及如何创建实例的信息暴露给外部程序。
除了上面提到的例子,工厂模式的实现方式还允许有一些小小的变化,例如:
· 基类可以是一个抽象类,在这种情况下,工厂类必须返回一个非抽象类。
· 基类提供了一些缺省方法,只有当这些缺省方法不能满足特殊需求的情况下才在子类中重写这些方法。
· 可以直接通过传递给工厂类的参数决定应该返回哪一个子类的实例。
4.使用工厂模式,它的设计期与运行期的对象不同,这样就增强了代码的可扩展性。
它把构造器隐蔽了起了,降低了代码的耦合度,增强了代码的复用性。
工厂模式与new的比较:如果使用new关键字的话,那么如果这个类的对象在很多的地方用到,必须要使用多次的new操作,这样容易引起代码的重复使用, 如果,需要改动或者替换成这个类的子类对象,那么,就需要把执行了new操作的所有的地方都要改,比较麻烦。而工厂模式,因为它代替了构造器和new关键 字,而且,它是使用面向接口的,所以,需要这个类的对象的时候,只需要调用这个方法就可以了,如果,需要改动或者替换成这个类的子类对象,只需要修改这个 工厂里面的内容,而其他的地方都不需要改动。
工厂模式的结构是:用一个方法来代替new关键字和构造器。
单例模式:
分类:
1.单例模式的四大特征:
懒汉式:
1.声明一个私有的,静态的本类对象,但并不在声明的时候就初始化,因此,它的值为null
2.私有化构造器
3.对外提供一个全局的,公有的,静态的,唯一的方法,用来获得该实例,但注意的是:必须要手动保持线程同步(synchronized)
4.在该方法里,判断对象是否为null,如果是null的话,表示这个类还没有被实例化,就会初始化这个对象,再返回如果不是null的话,就直接返回
饿汉式:
1.声明一个私有的,静态的本类对象,并在声明的时候就初始化
2.私有化构造器
3.对外提供一个全局的,公有的,静态的,唯一的方法,用来获得该实例(饿汉模式线程本身就是同步的)
4.在该方法里,直接返回该对象即可
从资源利用效率角度来讲,这个比懒汉式单例类稍差些。从速度和反应时间角度来讲,则比懒汉式单例类稍好些。
2.它能解决什么问题:它确保一个类在Java虚拟机里只有一个实例,使一个类只有一个对象,整个系统共享这个对象。
3.什么时候使用懒汉式和饿汉式:
1.在使用的几率很少的情况下用懒汉式。
2.而是用的几率很高的话就用饿汉式。
4.单例模式的好处:
整个系统中的所有的类共用一个实例化对象,这样可以有效的节省资源。
模板模式:
模板模式是多个实现类继承一个抽象父类,然后通过抽象父类控制*逻辑,并把基本操作的实现推迟到子类去实现,这样能有效简化控制层诸类的代码,借 用这种模式,我们可以把固定的异常处理代码放在基类中,而让子类来实现具体的业务,如果执行业务过程中出现异常如数据库无法连接,用户找不到异常后,直接 将异常抛出让基类来处理,这样做成功的把业务处理和异常处理分开到了子类和基类两种类中,涉及具体业务处理的子类代码得到了很大的简化,更方便阅读,修改 和管理。
1.父类定义流程,子类实现:
模板模式解决了子类有大量重复的流程,重复的方法,重复的变量时的问题。不同的子类间都有的方法,抽取出来放在父类中,子类都有的流程,在父类中定义好其流程,流程的具体实现就交给子类来实现。
2.模板方法的目的:
A. 减少重复代码。
B. 防止调用出错。
3.使用模板方法的步骤:
A. 识别:从一系列的算法中去找到,他们的共同部分在哪,称之为识别。
B. 分离:将不同的代码抽取出来,称之为分离。
C. 实现:用
上一篇: 外观模式