一些基本的设计模式概念

 

 

《Android程式设计之美》-高焕唐

在描述OOP的时候,提到is a kind of 和is a part of,尤其,抽象和具象这两个词语的使用,让人很容易理解子类归纳出父类,父类派生出子类分别都做了什么事情?其实就是抽象和具象。

 

 

ViewGroup和View体系体现的聚合关系:

 

 

后续自己在描述android的类体系构造的时候可以用到基本组件(Primitive Componenent)和复合组件(Composite Component)这两个概念,android的设计师也是基于这两个概念来设计整个类体系的。这也是一种设计模式。比如ViewGroup就是一种复合组件,而没有继续派生的Button(可能继续派生了哈)就是中基本组件,不是其他类别的一种抽象。

 


ViewGroup和View具有聚合(Aggregation)关系,TextView和View之间是继承关系,因此TextView和ViewGroup也具有聚合关系。这里要注意,这种聚合关系体现在View下面如TextView的整个类体系的类可以作为apart of ViewGroup(当然ViewGroup的派生类和TextView这个类体系也具有聚合关系),换种说法就是多个小的View对象可以聚合成一个集合型的View对象(复合组件)


ViewGroup自己也是View的子类,因此ViewGroup和自己也具有聚合关系(实际体现就是多个布局聚合在一起形成一个复合型的布局)
基类(Base-class)派生(Derive)出子类


在View的这样一种聚合模式下,用户是可以自己定制新的组件假如到这个体系中去的,这样就保证了良好的拓展性(具体体现在,我们可以自己定制各种控件和布局,甚至拜托二维控件,构造新的复合组件)

一种很好的理解:
由基本数据类型所宣告的变量,直称为变量。

 

 

由抽象数据类型(即类别)所宣告的变量,就称为类别。

 

 


对象参考(Object Reference)


java中一般是通过Reference Argument(就是引用)来传递数据,这就是所谓的籍参考调用(call by Reference).
不采用拷贝,而采用引用就可以避免参数过大的时候引起的效率问题。


父子类构造函数如何一起构造一个子类对象(对讲解View树的调用关系有帮助)


聚合和组合的区别在于二者是否共生共灭


View和Context体系体现出的组合关系:
Context常用来建立包含关系,android应用框架中就是使用了对象包含关系来体现各种组合的。
看了这个对Context和this的作用有了新的理解。
组合和继承的区别:
组合方法中,新类别不包含原类别的函数。
程序的覆写在控制反转(Inversion of Control)上起到重要的作用。

复写钩子函数的时候有三种选择:
1.不覆写
2.Reuse(调用父类函数)
3.完全覆写(不调用父类函数)
一般的组合模式是抽象类别+预设函数(钩子函数)

当java编译某个类别的时候会为该类别建立一个虚函数表,将各函数的地址逐一存放在表格中。
Father child = new Child();
的时候,child.this指针指向的是Child类型对象。

纯虚类扮演的角色是接口,(接口的另一种方式是Interface机制),原来之前用纯虚函数来作接口是
因为Interface机制还没出现。
类别层级(Class-level)的数据又称为共享数据,类别层级的函数(Class-level Function)只能存取共享资料的值,不能读写对象内部的数据值,而起调用当然就要用类别二


不是实际对象来调用了。


阶层结构(Hierarchical)
当应用程序执行时,android框架会不断发出讯息给应用类别,推动画面布局的变化,因此
android框架是程序运转的动力来源。

在state模式中Context类别必须要能够直接使用State抽象类别的接口才行,如果不能用,就需要用到Proxy模式。换句话说Proxy模式一定程度上是用来解决进程间通信的。
关键在于,Proxy模式将不变的部分抽取出来,并"由Proxy类将复杂的IPC沟通机制封装起来",从而让人感觉访问Proxy的时候感觉和直接访问目标类一样。
和Adapter模式相比,Adapter是封装一层接口,从而起到隔离真正接口的作用,而Proxy的作用是提供一个能够直接访问的分身,从而解决不能跨进程直接访问的问题。

 

 

Stub类的设计其实是一种设计上的优化,本来Adapter和实际类是分开的,但将二者合并之后,就形成了一个Stub。这就形成了常见的Proxy-Stub模式(自己看Android系统的源码,怎么样也想不到这种模式其实是一种优化啊。。不看书果然不行,唉)但是这种模式还是需要访问端的开发者具备RPC知识,因此还需要优化。。让懂RPC的人统一编写Proxy和Stub,然后由不懂的人直接使用。

 

 

 

最后还可以由aidl工具生成两套接口供双方使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值