----------- android培训、java培训、期待与您交流! ------------
单例设计模式(Singleton):是为了解决一个类在内存中只存在一个对象的问题。我们在多线程学习期间的火车票售票案例和银行业务调度系统中接触到了单利设计模式。
设计思路和步骤:
1、为了避免其他程序过多的建立该类对象,先禁止其他程序建立该类对象,这就要将该类的构造函数私有化。
2、为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象,这就要建立该类的静态私有对象。
3、为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式,这就要提供一个静态方法让外界可以获取到该对象。
该设计模式有两种设计方式:
1、饿汉式:设计步骤完全如上所述。一般开发中推荐使用这种方式。
2、懒汉式:跟饿汉式的区别主要是,在这种设计方式下,该类对象的引用建立后并未实例化,要等到外界需要获取该类对象时再实例化。这种设计方式是存在线程安全问题的,所以一般需要加锁来保证线程安全。但是加锁后,因为增加了判断锁的操作,所以程序的性能会降低很多。
单例设计模式在银行业务调度系统中的应用示例如下:
模板设计模式(Template Method):首先定义一个算法确定的部分,即算法的框架,然后把算法不确定的部分暴露出去,让这些操作延迟到子类中去实现。
装饰设计模式(Decorator):是为了在一个对象已有功能的基础上,对这些功能进行增强。在IO输入输出流中接触到了装饰设计模式。通过装饰设计模式,我们通过BufferedReader等缓冲区技术极大地提高了数据传输效率。具体实例如下:
享元模式(Flyweight):运用了共享技术,使得程序不用建立大量对象,从而极大地减少了系统存储空间的占用。在我们建立Integer对象和String类型对象的时候看以看到这种设计模式的应用。其示例如下:
享元模式在建立Integer对象中的应用:如果要建立的Integer对象包装的基本数据类型的值介于-128~127之间,那么就会应用到缓冲池的概念,它就是应用了享元设计模式。示例如下:
享元模式在建立String对象中的应用:如果要建立String类型的对象,就先到字符串缓冲区中去找是否有该对象,如果有,直接将引用指向该对象即可,如果没有才会建立对象。(仅限于直接赋值字符串的情况,对于new String()建立对象的方法,该模式不生效)示例如下:
代理设计模式(Proxy):通过对一个对象提供代理,来控制其他程序或对象对这个对象的的访问。我觉得代理,其实相当于一种过滤器或者是拦截器。用来限制对代理对象的访问操作,或过滤从代理对象返回的数据。