设计模式
设计模式概念:是一套被反复使用、多数人知晓、经过分类编目的、代码设计经验的总结,使用设计模式是为了可充用代码、让代码更容易被他人理解、保证代码的可靠性。
简言之,它是前人编写代码过程中的总结,是一种编写代码的经验,熟知其中的方法和概念对软件的结构组成有很多好处和便利。
设计模式分为三大类~~
创建型模式有:抽象工厂模式、原型模式、单例模式、建造者模式、工厂方法模式。
结构型模式有:、组合模式、享元模式、适配器模式、桥接模式装饰模式、外观模式、代理模式。
行为型模式有:板方法模式、迭代器模式、中介者模式、解释器模式、模备忘录模式、观察者模式、职责链模式、命令模式、策略模式、访问者模式。
工厂方法模式:
建立一个工厂类,顾名思义,以工厂的方式成批创建实例,不再需要单独去new一个实例,而是通过工厂这个类来完成这一工作。(创建实例模块化)
其中有
普通工厂模式:建立工厂类,对实现了同一接口的一些类创建实例。
多个工厂方法模式:提供多个工厂方法,分别创建对象
静态工厂方法模式:将工厂方法模式的方法设置为静态,不需要创建实例,可直接调用。
抽象工厂模式:
原本工厂方法模式存在问题是:类的创建依赖工厂类,想要拓展程序,必须对工厂类进行修改。为了解决这个问题,就用此模式,创建多个工厂,当需要增加新的功能,直接增加新的工厂类。
单例模式:
在整个过程,只需要一个实例的存在。
应对问题:
1、类的创建频繁,节省资源
2、少写new操作符,降低内存的使用频率
3、某些类的确只需要一个,创建多个将会出错,也是保证权限的唯一性。
建造者模式:
它与工厂类有着对比,工厂类模式提供的是单个类的模式,而建造者模式是多个产品集中管理,各个组合,来创建复合对象,其拥有不同的属性。
原型模式:
将一个对象作为原型,然后的操作是:可对其进行复制(克隆),产生一个和原对象类似的新对象。
其中存在
浅复制:复制对象后,基本数据类型的变量都会重新创建,但是引用类型,还是指向的是原对象(并没有复制)
深复制:完全彻底复制,将引用类型也重新创建了。
适配器模式:
一种转换方式,因为接口不匹配而造成的类的兼容性问题,用此方法可将某个类的接口转换成所要的另一个接口表示。
装饰模式:
给一个对象添加新的功能
应对问题:
1、动态地为一个对象增加新功能,且能撤销
2、扩展一个类的功能
代理模式:
多一个代理类出来,为原对象进行操作。能帮助原对象完成一些他自己完成不了的功能,相当于一个帮助者。此模式,可以将功能划分更清晰,有助于后期维护。
外观模式:
解决类与类之间的依赖关系,将类与类之间的关系描述到配置文件中,降低他们的耦合度。
桥接模式:
就是把抽象化和实现化进行分离,成为独立模块,让两者能够独自变化。
比如JDBC提供了一个接口,连接数据库的时候,我们可以调用各个数据库,但不需要改动太多代码,只需要用一个叫数据库驱动的程序来桥接就可以完成上面所说的情况。
组合模式:
一般用于处理树形结构的问题
将多个对象组合在一起进行操作(部分-整体),例如二叉树等。
享元模式:
实现对象的共享,当系统中对象很多的时候,可用此方法减少内存的开销
比如数据库的连接池中,url、driverClassName、username、password这些属性对于每一个数据库连接都是一样的,就可使用此模式来处理。
策略模式:
定义一系列算法,然后将每一个算法进行封装,系统提供不同算法的实现,新增或者删除算法,但是使用决定权在于用户,外部用户来决定用哪个算法。
模板方法模式:
一个抽象类中,有很多个方法,存在一个主方法,其它方法可以抽象或者实际。再定义一个类,继承此抽象类,重写其抽象方法,实现对子类的调用。
观察者模式:
当一个对象有变化时,其它依赖该对象的对象会收到通知,并且随之变化。
迭代器模式:
顺序访问需要遍历的对象,不需要知道内部情况。
职责链模式:
存在多个对象,每个对象都有着对下一个对象的引用,如此,就成了一条链。请求就在此链上进行传递,直到链上的某个对象决定处理这个请求。可以看出,发出请求者不知道哪个对象会处理这个请求,所以就能达成隐瞒客户端的情况下,对系统进行动态地调整。
命令模式:
发出命令,有点过度的意思。比如命令者发出了一个命令,命令进行传输,执行者收到命令后开始执行操作。其中就可以看出,命令者只管发出命令,执行者只管操作,命令只管传输。都只做好自己的事,不需要管这其中是怎么实现的。struts就是这种思想
备忘录模式:
保存一个对象的某个状态,类似照相。
比如一个普通的类有各种各种属性,备忘录类就用来储存这个普通类的属性值,也有一个类用于储存备忘录类。
状态模式:
当对象的状态改变的会后,也会改变其行为。
比如网站中,权限的变更,显示的内容也会有着变化。
访问者模式:
分离对象数据结构和行为的方法,通过此分离,可以为一个被访问者动态添加新的操作而无需做其他修改的效果。
应对问题:
1、考虑以后是否添加新功能
2、考虑类是否允许修改代码
3、新功能会不会与现在的功能存在兼容问题
中介者模式:
此模式只关注类与类之间的关系,通过中介者来处理关系,完成它们的交互,降低类与类之间耦合关系。
解释器模式:
用来定义语言的文法,创建各种各样的解释器,解释语言中的句子。
如正则表达式的解释清等。