随笔分类 - 设计模式
摘要:桥梁模式(Bridge Patter)也叫做桥接模式,是一个比较简单的模式。 定义: 将抽象和实现解耦,使得两者可以独立地变化。 通用类图: ● Abstraction——抽象化角色 它主要的职责是定义出该角色的行为,同时保存一个对实现化角色的引用,该角色一般是抽象类。 ● Implementro——实现化角色 它是接口或者抽象类,定义角色必须的行为和属性。 ● RefinedAbstract...
阅读全文
摘要:适配器模式(Adapter Pattern)又叫做变压器模式,也叫做包装模式。包装模式还包括装饰模式。 定义: 将一个类的接口变换成客户端所期待的另一个接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 通用类图: ● Target目标角色 该角色定义把其他类转换为何种接口,也就是我们期望的接口。 ● Adaptee源角色 源角色是已经存在的、运行良好的类或对象,经过适配器角...
阅读全文
摘要:原型模式(Prototype Pattern)的简单程度仅次于单例模式和迭代器模式。 定义: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 通用类图: 通用代码:原型模式的优点:● 性能优良原型模式是在内存二进制流的拷贝,要比直接new一个对象性能好得多,特别是要在一个循环体内产生大量的对象时,原型模式可以更好地体现其优点。● 逃避构造函数的约束这既是它的优点也是缺点,直接...
阅读全文
摘要:建造者模式(Builder Pattern)也叫做生成器模式。 定义: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 通用类图: 通用代码:如果有多个产品类就有几个具体的建造者,而且这多个产品类具有相同接口或抽象类。导演类起到封装的作用,避免高层模块深入到建造者内部的实现类。当然,在建造者模式比较庞大时,导演类可以有多个。建造者模式的优点:封装性 使用建造者模式可...
阅读全文
摘要:抽象工厂模式(Abstract Factory Pattern)是一种比较常用的模式。 定义: 为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类。 抽象工厂模式是工厂方法模式的升级版本,在有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。 通用类图: 通用代码:抽象工厂模式的优点:封装性,每个产品的实现类不是高层模块要关心的,高层模块只关心...
阅读全文
摘要:工厂方法模式使用的频率非常高,在我们日常的开发中总能见到它的身影。 定义: 定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。 通用类图: 通用源码:工厂方法模式的优点:良好的封装性,代码结构清晰。一个对象创建是有条件约束的,如一个调用者需要一个具体的产品对象,只要知道这个产品的类名(或约束字符串)就可以了,不用知道创建对象的艰辛过程,降低模块间的耦合...
阅读全文
摘要:单例模式(Singleton Pattern)是一个比较简单的模式。 定义: 确保某一个类只有一个实例,而且自动实例化并向整个系统提供这个实例。 通用类图: 通用代码: Singleton类称为单例类,通过使用private的构造函数确保了在一个应用中只产生一个实例,并且是自行实例化的。单例模式的优点:由于单例模式在内存中只有一个实例,减少了内存开支,特别是一个对象需要频繁地创建、销毁时,而且...
阅读全文
摘要:开闭原则(Open Closed Principle)是Java世界里最基础的设计原则,它指导我们如何建立一个稳定的、灵活的系统。 定义: 一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。 Softeware entities like classes,modules and functions should be open for extension but closed for mo...
阅读全文
摘要:定义: 迪米特法则(Law of Demeter,LoD)也称为最少知识原则(Least Knowledge Principle,LKP)。 一个对象应该对其他对象有最少的了解。通俗地讲,一个类应该对自己需要耦合或调用的类知道得最少,你(被耦合或调用的类)的内部是如何复杂都和我没关系,那是你的事情,我就知道你提供的public方法,我就调用这么多,其他的一概不关心。 含义: 只和朋友交流 朋友...
阅读全文
摘要:接口隔离原则 Interface Segregation Principle定义:客户端不应该依赖它不需要的接口类间的依赖关系应该建立在最小的接口上我们可以把这两个定义概括为一句话:建立单一接口,不要建立臃肿庞大的接口。再通俗一点讲:接口尽量细化,同时接口中的方法尽量少。提供给每个模块的都应该是单一接口,提供给几个模块就应该有几个接口,而不是建立一个庞大的臃肿的接口,容纳所有的客户端访问。接口是我...
阅读全文
摘要:依赖倒置原则(Dependence Inversion Principle,DIP)的原始定义: 高层模块不应该依赖底层模块,两者都应该依赖其抽象; 抽象不应该依赖细节; 细节应该依赖抽象。 依赖倒置原则在Java语言中的表现是: 模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或者抽象类产生的; 接口或抽象类不依赖于实现类; 实现类依赖接口或抽象类。 ...
阅读全文
摘要:里氏替换原则(Liskov Substitution Principel)是解决继承带来的问题。继承的优点:代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性; 提高代码的重用性; 子类可以形似父类,但又异于父类; 提高代码的可扩展性; 提高产品或项目的开放性。继承的缺点:继承是侵入性的,只要继承就必须拥有父类的所有属性和方法; 降低代码的灵活性,子类必须拥有父类的属性和方法,...
阅读全文
摘要:定义:应该有且仅有一个原因引起类的变更。There should never be more than one reason for a class to change.优点:1、类的复杂性降低,实现什么职责都有清晰明确的定义;2、可读性提高,复杂性减低,可读性当然提高;3、可维护性提高,可读性提高,可维护性当然提高;4、变更引起的风险减低,变更是必不可少的,如果接口的单一职责做得好,一个接口修改...
阅读全文