「代码大全」一书谈到了抽象数据模型(ADT)的概念,以PHP的角度来看,平常最常见的类就是抽象数据模型的表现形式,很多人对面向对象编程还处在懵懵懂懂的阶段,经常什么方法都塞在一个类中,举个例子,我们有个字体的类,代码如下:
继续阅读 »
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象都练成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
如图所示:
请求→A→B→C→D
再来一个更形象的比喻,读书的时候假设你坐在前面,要在上课时告诉后排一些事情,这时候你可能会选择写一张小纸条,小纸条就会陆续的被向后传递。
从上面的例子中,我们可以看到职责链的优点:请求发送者只需要知道链中的第一个节点,从而弱化了发送者和一组接收者之间的强联系。
实际开发中的职责链模式
需求:一个售卖手机的电商网站,交纳500定金和200定金和没交定金的有不同的优惠状况。
我们刚开始可能会这么写:
// orderType: 订单类
继续阅读 »
写在前面的话
这两天一直在看JPA的相关内容,一下对最近的了解的信息进行整理,以前一直不了解什么是JPA,现在有了清晰的认识以作记录。
JPA是什么
JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
起源
Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用开发工作;其二,Sun希望整合ORM技术,实现天下归一。
JPA由EJB 3.0软件专家组开发,作为JSR-220实现的一部分。但它不囿于EJB 3.0,你可以在Web应用、甚至桌面应用中使用。JPA的宗旨是为POJO提供持
继续阅读 »
在iOS中有几种方法来解决多线程访问同一个内存地址的互斥同步问题:
方法一 @synchronized(id anObject)
会自动对参数对象加锁,保证临界区内的代码线程安全
@synchronized(self)
{
// 这段代码对其他 @synchronized(self) 都是互斥的
// self 指向同一个对象
}
继续阅读 »
本以为ACE_Message_Block只是对void*一个简单的封装, 查看了源码发现里还有一层ACE_Data_Block:是一个带引用记数的数据区;ACE_Message_Block::duplicate会对 ACE_Message_Block进行”浅复制”,即两个ACE_Message_Block对象引用同一个ACE_Data_Block对象,但 ACE_Data_Block的引用记数为2;
继续阅读 »
从F版本就开始熟悉OpenStack的代码,到现在几大核心模块的代码基本都精读过,但不得不说,目前Heat的代码编写,应该是用到Python高级语法最多的模块,各种对象建模也比其他几个模块复杂一些,初学时比较吃力。这里记录下来,给自己和感兴趣的人参考。
版本:Icehouse
Dependencies
__iadd__:接受一个 (requirer, required) 元组,进行加法操作
required_by(self, last):返回依赖该资源的所有资源
__getitem__(self, last):返回一个Dependencies对象。以last作为叶子节点。
graph(self, revers
继续阅读 »
Introduction
在[PHP设计模式(四):继承][2]中我们介绍了继承,利用extends来进行程序设计的方法。
在[PHP设计模式(二):抽象类和接口][3]中我们介绍了接口,事实上也存在利用interface的程序设计方法,那就是多态。
和C/C++,Java,Python等语言一样,PHP也支持多态。多态更多是是一种面向对象程序设计的概念,让同一类对象执行同一个接口,但却实现不同的逻辑功能
。
多态/Polymorphism
还是用动物、鲸鱼和鲤鱼来举例:
interface IEat {
function eatFish();
function eatMoss();
}
class Wha
继续阅读 »
通过绑定规则来确定this的绑定对象。
默认绑定
默认绑定规则看作是无法应用其他规则时的规则,
独立函数调用是最常用的函数调用方式。比如:
```
function foo() {
console.log( this.a );
}
var a = 2;
foo(); // 2
```
此时foo在调用的时候是默认绑定,因为没有指定上下文,所以默认上下文
是window,而var a = 2;这句意思是给window添加了一个a属性,并赋值为2,
所以会打印2。
如果使用严格模式(strict mode),那么全局对象将无法使用默认绑定,因为
this会绑定到undefined.
隐式绑定
另一条需要考虑的规则是调
继续阅读 »
使用java.util.concurrent.ThreadFactory类创建线程
工厂设计模式是Java中最常用的设计模式之一。它是一种创建型设计模式,能够用于创建一个或多个类所需要的对象。有了这个工厂,我们就能集中的创建对象。
继续阅读 »
Handler - Message - Looper 说起来也就是这么一回事,Looper实现在Thread中负责不断的循环监听处理Message,要不然Thread运行完就自己关了。当你不需要的时候就可以把Looper关了,线程就自动运行完了。
Message
实现了序列化接口,what区分类型,arg的参数使用简单的整形,obj存储对象,data存储一个bundle,target是一个Handler。剩下的就是搞了个对象池回收Message,所以才会推荐用Message.obtain()来新建,其实就是从回收池里拿东西。
总之没什么好说的。
Looper
``` java
继续阅读 »