COMMAND模式和ACTIVE OBJECT模式
仅有一个具有唯一方法的接口组成,封装了一个没有任何变量的函数。看似违背面向对象思想,将函数层面的任务提升到类的层面;但确是该模式可以对逻辑层面的链接关系与对象实体进行解耦。是最简单、优雅的模式之一。
COMMAND模式最常见的用法是创建和执行事物操作,如下图:
优点:
- 实体上解藕:很好的接触了从用户获取数据的代码、验证并操作数据的代码,以及业务对象本身之间的耦合关系
- 时间上解藕:一旦获取了数据,就没有理由要求验证和执行方法立即被调用。
Active Object模式:实现了多线程控制的古老技术,简单的多任务核心。ActiveObjectEngine为何Command对象的链表,用户向引擎增加新命令,或者run()遍历链表里的命令。把sleep命令放到链表末尾,直到wakeup命令唤醒前,run()函数永远不会返回。
TEMPLATE METHOD模式和STRATEGEY模式
Template Method(模版)模式优先使用对象组合而不是继承,Template Method是面向对象编程中的一种重用形式。通用部分放在基类,具体实现放在派生类。会存在绑定关系,部分违反DIP。
Strategey(策略)模式用不同的方法倒置通用的算法和具体实现,它的结构更优,Application接口可以被其他算法使用,但也带来了需要更多的类和层次结构、更多时间空间的开销。
FACADE模式和MEDIATOR模式
Facade(外观)模式,当想要为一组具有复杂且全面的接口对相关提供一个简单且特定的接口时,可以使用该模式,通常是约定一个关注点,每个人都统一去使用该关注点,而不是隐藏于其下的对象。
Mediator(中介者)模式,如下图:
JList和JTextField的使用者并不知道该Mediator的存在,它安静地待着,把它的策略施加在那些对象上,而无需他们的允许和知晓。
特点:
- 从下面施加策略,在使用上是不明显且不受限制的
- 对用户是隐藏的,它的策略是既成事实的而不是一项约定事务。
SINGLETON模式和MONOSTATE模式
两种强制对象单一性的模式。Singleton可以透过派生约束一个现存类,Monostate对使用者透明。根据需要来选择哪中设计模式
Singleton(单例)模式,我经常使用静态内部类的方式来构造单例,使得对象有且仅有一个。
Monostate模式,保护对象属性为static静态变量,它会产生多个实例创建销毁,内存占用多,造成平台局限性。
NULL OBJECT模式
确保函数有返回值,而不是null或0
生活要多点不自量力