设计模式:
设计模式常用的有23种。设计模式是一种设计经验的总结,为了解决某些场景下的某一类的问题,是一种通用的解决方案
创建型(5):解决对象创建的过程
结构型(7):把类或对象通过某种形式结合在一起
行为型(11):解决类或对象之间的交互,进行更合理的优化
创建型
1.单例模式(Singleton)
为了设计让一个类只能创建一个对象,在用户多的时候有效节省内存空间
思路:
(1)让构造方法成为私有方法private,保证外面不能随便创建对象
(2)单例,不是一个都没有。在本类中的某个成员位置上创建唯一的对象
写一行创建对象的语句
构造方法 | 不行,私有,本身就是这个构建过程 |
---|---|
块 | 不行,没有返回值,创建了对象也无法给别人使用 |
方法 | 不行,每一次执行都会产生一个过程,保证不了唯一 |
属性 | 可以,为避免”套娃“现象,将属性设置为static静态,保证当前类下对象唯一 |
对象在创建的时候空间内部所有的成员都加载完毕才算完成
属性中若为构造方法,堆内存在调用空间的时候调用了构造方法,构造方法在栈内存中执行,会产生”套娃“现象,所以会造成栈内存溢出错误。解决方法:static
为了保证安全,将属性设置为私有属性。
总体来看,属性要设置为私有静态的,里面填写构造方法
(3)提供一个获取单个对象的方法给用户(get类名或newInstance())
注意:要将该方法设置为static,否则就会变成”先有鸡还是先有蛋“的问题了,调用方法需要对象,不需要显式的创建对象实现创建对象,通过类创建,所以加static
实现————->饿汉式(立即加载) 懒汉式(延迟加载) 生命周期托管(单例对象别人帮我们处理):
(1)私有的构造方法
(2)私有的静态的当前类对象作为属性
(3)公有的静态的方法返回当前类对象
对象的加载:
饿汉式(立即加载):对象在程序启动时加载 | 不会产生对象没有就拿来使用的问题,即空指针异常。但启动项目加载的对象过多,有些没使用产生的服务器承载压力的问题 |
---|---|
懒汉式(延迟加载):对象什么时候用到了才会加载 | 可能会由于没有操作好,导致异常。启动项目时候只有需要的加载,不需要的还没有创建,不会浪费空间 |
生命周期托管(单例对象别人帮我们处理):对象加载过程交给别人 |
结构型
1.适配器模式(Adapter)
(1)缺省适配器模式:解决接口问题
例子:和尚————》吃斋、念经、打坐、撞钟、习武
鲁智深—》不遵守
在规则与具体之间增加适配器进行规范。
接口规定规则,但存在具体类实现接口但不想实现里面的部分方法
解决方式:通过在中间层添加一个抽象类,该抽象类实现接口,同时自己拥有一些具体的方法,可以先在里面抛出异常,然后具体类在继承该抽象类。具体方法不用没关系,用的话根据意愿重写掉即可
行为型
1.策略模式(Strategy)
用来解决执行流程固定,执行的结果由于提供了不同的策略而不同
方法—–》抽象
具体实现—–》一个策略