Appearance
My great project tagline
一个类应该有且仅有一个引起它变化的原因
子类必须能够完全替换父类,且替换后程序的原有逻辑不受破坏
一个对象应该对其他对象有最少的了解
通过扩展现有代码(如继承、组合、接口实现)来添加新功能,而非修改已有代码
客户端不应被迫依赖它们不需要的接口
高层模块不应依赖低层模块,两者都应依赖抽象;抽象不应依赖具体实现,具体实现应依赖抽象
定义一个创建对象的接口,但由子类决定具体实例化哪个类。工厂方法将对象创建延迟到子类。
提供一个接口,用于创建一组相关或依赖的对象,而无需指定它们的具体类。
确保一个类只有一个实例,并提供全局访问点。
将复杂对象的构建过程与其表示分离,使得相同的构建过程可以创建不同的表现形式。
通过复制现有原型实例来创建新对象,而非通过 `new` 构造器直接实例化。
将一个类的接口转换为客户端期望的另一个接口,使原本因接口不兼容而无法协作的类能够协同工作。
动态地为对象添加额外职责,且比继承更灵活。
为其他对象提供一种代理以控制对这个对象的访问。
为子系统中的一组接口提供一个统一的简化入口,降低客户端与子系统的耦合。
将抽象部分与其实现部分分离,使它们可以独立变化。
将对象组合成树形结构以表示“部分-整体”层次结构,使客户端对单个对象和组合对象的使用具有一致性。
通过共享技术高效支持大量细粒度对象,减少内存占用。
策略模式通过将算法封装在独立的策略类中,使得它们可以相互替换,而不影响客户端代码。
模板方法模式通过将不变的行为移到父类,去除子类中的重复代码,同时保留特定步骤的灵活性。
它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
它提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。
它将请求的发送者和接收者解耦,让多个对象都有机会处理请求,从而避免请求发送者与接收者之间的耦合关系,从而让系统更加灵活。
它将请求封装成对象,从而使你可以用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。
它在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。
它允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。
它将作用于某种数据结构中的各元素的操作分离出来,使得可以在不改变数据结构的前提下定义作用于这些元素的新操作。
它定义一个中介对象来封装一系列对象之间的交互,使得这些对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
它提供了一种解释语言的语法或表达式的方式,使得可以用一种统一的方式来解释不同的语言或表达式。