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