1、装饰器模式
装饰器模式主要解决在类实例化阶段动态添加某些属性和方法的问题,而不是在一开始就将所有的属性都定义好。
实现方法:主要分为decorator和component,他两都继承自同一的抽象类,component一般是主要的类,而decorator则是对component不具有的功能的添加或增强。decorator会持有component对象并在自己的类中对该对象进行操作的到一个同类型的增强对象。
例子:JavaIOstream
2、单例模式
解决问题:一个类只能有一个实例化对象(因为有的资源只有一个,如果多个实例就会出现冲突)
实现方法:经典单例模式是将构造方法私有化,并自己持有本类的私有对象,不允许在类外面创建实例,只提供一个static getInstance 的静态方法,在该方法中实例化该类并赋值给方法调用者。
优化:在多线程的情况下,可能还是会冲突 1.可以在getInstance 方法上加同步锁(锁很耗资源);2.可以直接类中创建实例;3.双重加锁
3、委派模式
标准定义:委派模式的原理为类B和类A是两个互相没有任何关系的类,B具有和A一模一样的方法和属性,并且调用B中的方法、属性就是调用A中同名的方法和属性。B好像就是一个受A授权委托的中介。第三方的代码不需要知道A的存在,也不需要和A发生直接的联系,通过B就可以直接使用A的功能,这样既能够使用到A的各种功能,又能够很好的将A保护起来,一举两得。
通俗理解:我们在项目开发中都是一个项目团队,老板把任务交给项目经理后,项目经理制定项目计划、将任务下发到底下的开发人员,这就是委派模式。但是我们发现这个跟之前学的代理模式非常相似,其实这也可以当做是静态代理模式的一种特例。此外,项目经理接到任务后会做一个权衡,怎么去选择分配这些任务。我们又发现这个跟之前学的策略模式非常相似,其实这也可以当做是策略模式的一种特例。(其实设计模式一般都不会独立存在,都是混合使用)
委派模式跟静态代理模式以及策略模式的区别?
委派模式:代理人全权负责这一件事。如:老板给项目经理安排任务,项目经理只是负责调度工作,真正干活的是底下的开发人员。
静态代理模式:代理人只是参与被代理人一小部分的工作,最终的结论还是得由代理人来决定。如:张三没空找对象,媒婆帮张三物色到一个对象,最终得看张三喜不喜欢这个对象。
策略模式:项目经理在分配任务的时候需要权衡,会产生多种分配方案,但是最终都是将手中的任务分配给底下的开发人员。
案例:spring中的DispatcherServlet