2016-10-12 曹强
模版方法是一种只需要使用继承就可以实现的非常简单的模式。他由两部分组成,第一部分是抽象父类,第二部分是具体实现子类。通常在抽象父类中封装了子类的算法框架,包括实现一些共用方法以及封装子类所有方法的执行顺序。子类通过继承这个抽象类,也继承了整个算法结构,并且可以选择重写父类的方法。 Coffee or Tea 假设我们现在要泡一杯咖啡步骤如下: * 把水煮沸 * 用沸水冲泡咖啡 * 把咖啡倒进杯子 * 加糖和牛奶 泡茶的步骤: * 把水煮沸 * 用沸水浸泡茶叶 * 把茶水倒进杯子 * 加柠檬 经过比较,我们可以发现泡茶和泡咖啡有以下共同点: 原料不同。一个是茶一个是咖啡,但是我们都可以把它们抽 继续阅读 »
2017-01-03 Lanffy
PHP
从PHP的5.4.0版本开始,PHP提供了一种全新的代码复用的概念,那就是Trait。Trait其字面意思是"特性"、"特点",我们可以理解为,使用Trait关键字,可以为PHP中的类添加新的特性。 熟悉面向对象的都知道,软件开发中常用的代码复用有继承和多态两种方式。在PHP中,只能实现单继承。而Trait则避免了这点。下面通过简单的额例子来进行对比说明。 继续阅读 »
2016-10-13 曹强
php
Introduction 在[PHP设计模式(四):继承][2]中我们介绍了继承,利用extends来进行程序设计的方法。 在[PHP设计模式(二):抽象类和接口][3]中我们介绍了接口,事实上也存在利用interface的程序设计方法,那就是多态。 和C/C++,Java,Python等语言一样,PHP也支持多态。多态更多是是一种面向对象程序设计的概念,让同一类对象执行同一个接口,但却实现不同的逻辑功能 。 多态/Polymorphism 还是用动物、鲸鱼和鲤鱼来举例: interface IEat { function eatFish(); function eatMoss(); } class Wha 继续阅读 »
2017-06-28 Eric Wang
RAMDirectory和FSDirectory都继承自BaseDirectory,而BaseDirectory继承自Directory,Directory是Lucene中设计的一个顶层抽象类,可以将其看做本地文件系统的一个目录。 RAMDirectory是基于内存实现的,具有较高的存储速度,但是受到内存大小的限制,而FSDirectory是基于文件系统实现的,针对不同的操作系统有不同的具体实现类,这些实现类无需用户操心,只需要调用FSDirectory.open(Path path)方法,它就会帮助我们选择最适合的子类,FSDirectory的瓶颈在于磁盘I/O。 如果机器内存足够大的话,那么组合使用RAMDirectory和 继续阅读 »
2016-11-26 Jamling
做Android 5年多了,第一次在Fragment中使用WebView,先将Activity中的代码复制过来改改,没有想到,竟然无法正常显示,而是打开手机浏览器渲染WebView,返回后,Fragment一片空白。这还能忍受?Google一把,说是要继承WebViewFragment,但是一旦继承,就破坏了我的框架结构。然后看了下WebViewFragment的源码,并不复杂。所以就将相关的源码合并到现有的fragment中,本以为可以妥妥地解决问题,结果还是那样。最后在stackoverflow上解决了终极解决办法,那就是需要设置特殊的WebViewClient。 java private class H5WebVie 继续阅读 »
2017-08-17 ruki
此版本主要修复一些稳定性问题。 更多使用说明,请阅读:文档手册。 项目源码:Github, Gitee. 改进 改进add_files,支持对files粒度进行编译选项的各种配置,更加灵活。 从依赖的target和option中继承links和linkdirs。 改进target.add_deps接口,添加继承配置,允许手动禁止依赖继承,例如:add_deps("test", {inherit = false}) 移除tbox.pkg二进制依赖,直接集成tbox源码进行编译 Bugs修复 修复目标级联依赖问题 修复target:add和option:add问题 修复在archlinux上的编译和安装问题 修复/ZI的兼容性 继续阅读 »
2014-04-25 Xiaosong Gao
说明 类别名可以随便取。 类别是一个类,它是添加了新功能的现有类。 使用类别就是为了能够为现有类添加新的方法,不用继承该现有类,就可使用现有类的对象调用添加的方法了。 类别可以使类的实现分散在多个文件中。 类别中不能有变量,类别中没有放变量的位置。 如果类中的方法和类别中的方法名称相同,这将造成冲突,类别的方法将完全取代类的方法。 同一个类的不同类别声明了相同的方法,这将导致不稳定,哪个方法会被调用是不确定的。 不建议在类别中覆盖类中的方法,因为在类别中的方法不能调用superClass的方法(因为没有元数据支持)。 类别方法不能覆盖于同一个类的其它类别中的方法。因为无法预知他们的加载优先顺序,就可能在编译时出错。 对类库的类别方 继续阅读 »
2015-09-17 ZhangTitanjum
上一篇介绍了150行代码实现滑动退出功能,相对来说比较简单,那么这篇文章稍微复杂点,有350行代码。 1. CircleImageView:继承系统的View,重写系统的方法; 2. 自定义style属性:供使用者在xml文件中配置,方便使用; 有多么好用就不罗嗦了(我左侧的头像就是),直接上代码: more ```java public class CircleImageView extends ImageView { private static final ScaleType SCALE_TYPE = ScaleType.CENTER_CROP; private static final Bitmap.Co 继续阅读 »
2016-09-12 徐哲
1.Java与C++的异同 Java解释性语言:源代码-编译器(字节码)-JVM执行 C/C++编译型语言:编译链接成二进制代码 Java不存在全局变量,全局函数,没有指针,不支持多重继承,不支持运算符重载,没有预处理器,不提供goto语句(但保留关键字),不支持自动强制类型转换,必须显式强制类型转换。 Java为纯面向对象语言,所有代码包括函数,变量等都属于类 继续阅读 »
2016-08-24 craneyuan
Java访问修饰符 |访问修饰符|作用范围| |---|---| |public| 完全开发| |private|只能本类访问| |protected|同包及子类访问| |default(无修饰符时)|同包访问| Java用于类的修饰符(2个)和限定符(2个) |访问修饰符|作用范围| |---|---| |public| 完全开发| |default(无) |同包访问| 注意:内部类可以拥有更多的访问修饰符 more |限定符|描述| |---|---| |abstract|指定为抽象类| |final|指定为最终类,不可被继承| Java用于成员变量的修饰符 public protected private 继续阅读 »