面向对象具有封装性,继承性,多态性.封装隐蔽了对象内部不需要暴露的细节,使得内部细节的变动跟外界脱离,只依靠接口进行通信.封装性降低了编程的复杂性. 通过继承,使得新建一个类变得容易,一个类从派生类那里获得其非私有的方法和公用属性的繁琐工作交给了编译器. 而继承和实现接口和运行时的类型绑定机制所产生的多态,使得不同的类所产生的对象能够对相同的消息作出不同的反应,极大地提高了代码的通用性. 总之,面向对象的特性提高了大型程序的重用性和可维护性.
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。面向对象是以功能来划分问题,而不是步骤。
面向对象: 人.吃(肉) 面向过程: 吃.(人,肉)
面向过程强调的是“吃”,“人”只是一个参数;面向对象强调的是“人”,“吃”只是一个动作。
面向对象的六大原则
- 单一职责原则(SRP):一个类中应该是一组相关性很高的函数、数据的封装。
- 开闭原则(OCP):软件中的对象(类、模块、函数等)应该对于扩展是开放的,但是对于修改是封闭的。
- 里氏替换原则(LSP):所有引用父类的地方,必须能使用子类的对象。核心原理是抽象。
- 依赖倒置原则(DIP):指一种特定的解耦方式,使得高层次的模块不依赖于低层次的模块的实现细节的目的。
- 接口隔离原则(ISP):类间的依赖关系应该建立在最小的接口上,目的是系统的解耦,从而更容易重构和部署。
- 迪米特原则(LOD):一个类应该对自己需要耦合或者调用的类知道的最少,使得系统耦合很低和更好扩展
常用的设计模式有以下11种:
1) 单例模式:目的是为了让系统中只有一个调用对象,缺点是单例使其他程序过分依赖它,而且不同单例运行在不同进程中,使得维护困难;(创建型)
在Android系统中,通过Context的getSystemService(String name)获取系统级别的服务或是LayoutInflater的类,这些服务会在合适的时候以单例的形式注册在系统中。
2) 建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
在Android源码中,最常用到Builder模式的就是AlertDialog.Builder,使用该Builder来创建复杂的AlertDialog对象。通过Builder对象来组装Dialog的各个部分,如title、buttons、Message等,将Dialog的构造和表示进行分离。
3) 原型模式:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。被复制的实例就是“原型”,这个原型是可定制的。在Android的应用有ArrayList和Intent(intent.clone();,涉及深拷贝和浅拷贝)。
4 工厂模式:生产固定的一些东西,如抽象类,缺点是产品修改麻烦;如喜欢动作片和爱情片的人分别向服务器发出同一个请求,就可以得到他们想看的影片集,相当于不同对象进行同一请求,需求均得到满足。(创建型)
在Android中应用最广泛的模式,最常用的有Activity中的各个生命周期(如onCreate()等)。ArrayList和HashSet中的iterator方法也相当于一个工厂方法,专为new对象而生。
5) 策略模式:定义了一系列的算法,并将每一个算法封装起来,而且使他们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
工厂方法模式(创建型) |
抽象工厂模式 |
策略模式(行为型) |
只有一个抽象产品类,关注对象创建 |
有多个抽象产品类 |
关注行为的选择 |
具体工厂类只能创建一个具体产品类的实例 |
具体工厂类能创建多个具体产品类的实例 |
白盒子(知道具体的实现过程) |
6) 观察者模式:就是多个对象对一个对象进行监控,如缓存;(行为模式)
7) 代理模式:自己的事交给别人去做,分别返回结果即可,如异步线程;(结构型模式)
8) 命令模式:调用对象与作用对象之间分离,由中间件来协调两者之间的工作,如控制器;(行为模式)
PackageManagerService中,其对包的相关消息处理右其内部类PackageHandler承担,其将需要处理的请求作为对象通过消息传递给相关的方法,而对于包的安装、移动以及包大小的测量则分别封装为HandlerParams的具体子类InstallParams、MoveParams和MeasureParams。
9) 适配器模式:将一个接口变成所需的接口,如Baseadapter可以适配listview和spinner(结构型模式)
10) 合成模式:将一对多的关系转换成一对整体的关系,如listview与适配器;(结构型模式)
11) 访问者模式:对不同的对象采取不同的处理,如instanceof。(行为模式)
Android编译注解(注解,也被称为元数据,作用就是将我们的需要的数据储存起来,在以后的某一个时刻(可能是编译时,也可能是运行时)去调用它。)核心依赖APT(Annotation Processing Tools)。当我们通过APT处理注解时,最终会将获取到的元素转换为相应的Element元素,以便获取到它们对应信息。
九种diagram:用例图、类图、对象图、组件图、部署图、时序图、协作图、状态图、活动图。