首页 > 代码库 > 设计模式
设计模式
1、 单例模式
a) 就是在整个应用中保证只有一个类的实例存在。单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
b) 单例模式分为懒汉式单例和饿汉式单例。
2、 工厂模式
a) 一抽象产品类派生出多个具体产品类;一抽象工厂类派生出多个具体工厂类;每个具体工厂类只能创建一个具体产品类的实例。
b) 一个工厂类处于对产品类实例化调用的中心位置上,它决定哪一个产品应当被实例化,也就是说由工厂类来决定实例化哪一个具体产品类的对象
c) 工厂模式是根据不同的参数得到不同的对象,用工厂方法代替new操作的一种模式,可带来更大的扩展性和尽量少的修改量。
3、 代理模式
a) 为其他对象提供一种代理以控制对这个对象的访问
b) 在某些情况下,一个对象不想或不能直接引用一个对象,而代理对象可以在客户端与目标对象之间起到中介的作用。
c) 代理是触发真正做事情的入口,通过被代理(目标对象)的业务逻辑方法来实现抽象方法,并可以附加自己的操作。
4、 观察者模式
a) 当一个抽象模型有两个方面,其中一个方面依赖于另一方面。将这两者封装在独立的对象中以使它们可以各自独立的改变和复用。
b) 当对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变。
c) 当一个对象必须通知其他对象,而它又不能假定其他对象是谁。换言之,你不希望这些对象是紧密耦合的。
5、 适配器模式
a) 想要使用一个已经存在的类,但如果它的方法不满足需求时。
b) 两个类的职责相同或相似,但是具有不同的接口
c) 应该在双方都不太容易修改的时候再使用适配器模式适配,而不是一有不同就使用。
d) 接口要尽量简单,可以实现多个接口来实现多个功能。使用适配器来实现多个接口,并重写接口中所有的抽象方法,再写一个子类来继承这个适配器,就可以实现想要的方法,而不是在子类中重写所有的抽象方法。使用适配器扩展性较好,若接口中需要添加新的抽象方法,就可以只在适配器中重写该方法,对子类不会造成影响。
6、 设计原则
a) 单一职责原则:(SRP:Single responsibility principle)又称单一功能原则。所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责。而单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。
b) 开放封闭原则:(OCP,Open Closed Principle)是所有面向对象原则的核心。其核心的思想是:软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。主要体现在两个方面:
- 对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。
- 对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。
c) 依赖倒置原则:(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。主要体现在两方面:
- 高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。
- 抽象不应该依赖于具体实现,具体实现应该依赖于抽象
d) 接口隔离原则:(Interface Segregation Principle)使用多个专门的接口比使用单一的总接口要好,一个类对另外一个类的依赖性应当是建立在最小的接口上的,一个接口代表一个角色,不应当将不同的角色都交给一个接口。
e) 里氏代换原则:(Liskov Substitution Principle)所有引用父类的地方必须能透明地使用其子类的对象。在软件中将一个父类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类对象的话,那么它不一定能够使用父类对象 。里氏代换原则是实现开闭原则的重要方式之一,由于使用父类对象的地方都可以使用子类对象,因此在程序中尽量使用父类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象。
设计模式