Android设计模式-总览

245 阅读5分钟

一、程序设计的六大原则

  1. 单一职责原则(Single Responsibility Principle)

一个类只负责一个功能,应该是一组相关性很高的函数、数据的封装,高内聚低耦合,对于外界而言,应该仅有一个引起它变化的原因。如果一个类中承担的职责越多,那么相当于把这些职责耦合在一起,那么类可复用性就越小。当其中一个职责发生变化时,可能会引发其他职责的变化,进而影响到其他职责的正常运作,因此要将这些职责进行分离,把不同的职责封装在不同的类中。但是,如果多个职责总是同时发生变化,那么可以把它们封装在同一个类中。

  1. 开闭原则(Open Closed Principle)

一个软件的实体(如类、模块、方法等)应该对扩展开发,对修改关闭。也就是说软件应该在尽量不修改原来代码的基础上进行扩展。当一个软件/应用需要升级或者维护等原因需要对原有的代码进行修改时,可能会将错误的代码引入,从而破坏原有的系统。因此当软件的需求发生改变时,我们应该尽量通过扩展的方式来实现变化,而不是通过修改原有的代码。

  1. 里氏替换原则(Liskov Substitution Principle)

所有引用父类的地方,也可以透明的使用子类的对象。通俗的说就是,只要有父类出现的地方,都可以子类来替代,并且不会出现任何异常或者错误,但是反过来不行。

我们都知道继承是java的三大特性之一,可以减少很多重复的代码,但也有存在一些问题:

  • 类的耦合性增加。如果父类发生了改变,子类也会随之变化。
  • 降低了代码的灵活性。继承是侵入性的,父类对子类有一定的约束性,子类必须拥有父类的属性和方法。

使用里氏特换原则,可以减少由于继承带来的问题。由于使用父类的地方可以用子类来代替,因此在程序中尽量使用父类类型来定义对象,在运行时确定子类的类型,用子类的对象替换父类的对象。在运用里氏替换原则时,尽量把父类设计成接口或者抽象类。

  1. 依赖倒置原则(Dependence Inversion Principle)
  • 高层模块不应该依赖于底层模块,都应该依赖于抽象。
  • 抽象不应该依赖于细节,细节应该依赖于抽象。

依赖倒置原则在java中的表现就是,模块之间的依赖是通过抽象的,实现类之间不发生直接的依赖关系,其依赖关系都是通过接口或者抽象类产生的;接口或者抽象类不依赖实现类;实现类依赖于接口或者抽象类。

  1. 接口隔离原则(Interface Segregation Principle)
  • 当需要依赖接口时,应该依赖多个专门的接口,而不是依赖一个庞大臃肿的接口。客户端不应该依赖它不需要的接口。
  • 类之间的依赖关系应该建立在最小的接口上。
  1. 迪米特原则(Law of Demeter)

一个对象应该对其他的对象有最少的了解。通俗的说就是,一个类应该对自己需要调用的类了解的最少,被调用的类的内部是怎么设计的和如何复杂的,都和我没有关系。

二、程序设计的三大模式

创建型模式:对对象的实例化过程进行抽象,这使得一个系统可以不用关心这些对象是如何创建,组合,呈现的,对于类创建模式来说通过使用继承改变实例化的类,对于对象创建模式来说通过使用代理来实例化所需要的对象。

创建型模式包括:单例模式、建造者模式、原型模式、工厂方法模式、抽象工厂模式

行为型模式:行为模式不仅表达了对象和类,还表达了他们之间的交互,涉及到了对象和算法的分配。

行为型模式包括:观察者模式、责任链模式、模板方法模式、策略模式、迭代器模式、命令模式、状态模式、备忘录模式、访问者模式、中介者模式、解释器模式

结构型模式:通过对多个类和对象进行组合得到复杂结构的类,一般使用继承或者成员变量引用形式来实现。

结构型模式包括:代理模式、装饰器模式、适配器模式、外观模式、组合模式、享元模式、桥接模式

三、23种设计模式

1、创建型模式

设计模式——单例模式

设计模式——构造者模式

设计模式——原型模式

设计模式——工厂方法模式

设计模式——抽象工厂模式

2、行为型模式

设计模式——观察者模式

设计模式——策略模式

设计模式——责任链模式

设计模式——模板方法模式

设计模式——迭代器模式

设计模式——命令模式

设计模式——状态模式

设计模式——备忘录模式

设计模式——访问者模式

设计模式——中介者模式

设计模式——解释器模式

3、结构型模式

设计模式——代理模式

设计模式——装饰器模式

设计模式——适配器模式

设计模式——外观模式

设计模式——组合模式

设计模式——享元模式

设计模式——桥接模式

四、参考

程序设计六大原则

Android 23种设计模式

设计模式之禅(第二版)-秦小波