摘要: 前言 单例模式是我们所要介绍的创建型模式中的最后一种设计模式,它与我们前面介绍过的四种创建型模式有相似之处,亦有很大的不同之处。相似之处是它们都属于创建型模式,抽象了对象类实例化的过程;而不同之处是在于单例模式在创建对象实例时,在全局范围内保证只会创建存在该对象类的一个实例对象,同时提供其全局访问点,而其他的四个创建型模式并没有此限制,可以自由地创建实例化多个对象类实例,这是它们之间的最大区别。... 阅读全文
posted @ 2012-09-25 09:16 JackyBing 阅读(2130) 评论(7) 推荐(0) 编辑
摘要: 前言 在前面介绍的三种创建型模式中,有一个共通的特点,就是不管是直接创建还是分步骤地组装创建都是通过第三方对象来完成,比如工厂、生成器。但是在创建型模式中还有一个比较特殊的模式,其不用通过第三方对象来完成对对象的创建,而是通过克隆自己来创建新对象,完成对新的对象的创建工作。这样客户端便可以直接根据原型对象来动态获取新的对象,而无需借助其他的辅助类来生成新的对象呢。类似这样的一种创建型模式,名曰—... 阅读全文
posted @ 2012-09-22 20:04 JackyBing 阅读(679) 评论(0) 推荐(0) 编辑
摘要: 前言 在前两讲,我们介绍了工厂方法和抽象工厂模式,这两种模式都是完成对一个或者若干个内部结构相对简单的对象的创建工作。换句话来说,这样的对象内部之间没有明显的子部分或者说是各个子部分间的“组装”过程。然而在现实世界里,确实存在着这样的对象模型,可以将内部抽象成若干个子部分,而且需要通过一定的组建算法将它们构建在一起形成完整的最终对象。面对类似对象的创建工作,显然工厂模式已经不善长,需要追寻新的模... 阅读全文
posted @ 2012-09-20 16:30 JackyBing 阅读(2636) 评论(4) 推荐(0) 编辑
摘要: 前言 在上一篇介绍的工厂方法模式,主要用于创建单个对象,但是如果需要在一个工厂方法中创建一系列相关或者相互依赖的对象时,我们是又该如何应对呢?如果完全按照工厂方法模式来设计,那么在设计的过程中,我们必然会面对越来越多的工厂类,但是由于这些对象彼此间存在一定的关联依赖性,我们或许可以通过机制将这一系列对象的创建工作统一封装起来?这就是即将登场的——抽象工厂方法模式擅长之处呢! 动机 在软件系统... 阅读全文
posted @ 2012-09-18 19:03 JackyBing 阅读(1690) 评论(4) 推荐(1) 编辑
摘要: 前言 创建型模式抽象了实例化过程。它们帮助一个系统独立于如何创建、组合和表示它的那些对象。一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化托给另一个对象。随着系统演化得越来越依赖于对象复合而不是类继承时,创建型模式变得更为重要。接下来,我们马上进入对第一个创建型模式的介绍——工厂方法模式。 动机 软件系统中,经常面临着“某个对象”的创建问题。由于用户需求的改变,该对象的... 阅读全文
posted @ 2012-09-16 20:30 JackyBing 阅读(1274) 评论(6) 推荐(0) 编辑
摘要: 前言 使用面向对象语言进行软件开发的人,对设计模式都应该有一定的情结,或多或少都接触过或者听说过若干种设计模式,比如常见的工厂模式、单例模式、模板方法等。当然,也有很多人天天和这些常用的设计模式打交道,只是因为没有系统地学习过相应设计模式,不知其理其形,所以纵使天天与其“照面”,也不相识。想来自己现在也对面向对象思想有了一定程度的理解,是时候系统地学习和整理下自己平时所熟识的种种设计模式呢。当然在园子里已经很多大牛已经写过很详细很通俗易懂的设计模式系列文章呢,自己重新再写一次,想必也不太可能总结得比大牛们还要好,但是本着学习、记录与交流的宗旨,还是大胆地将自己对设计模式的学习和理解诉诸博客中. 阅读全文
posted @ 2012-09-14 09:41 JackyBing 阅读(966) 评论(6) 推荐(2) 编辑
摘要: 前言 排序算法自始至终都是算法类的基础或者基石。所谓排序算法是一种能将一串数据依据特定排序方式的一种算法。可以根据不同方面将众多的排序算法进行归类,比如排序的稳定方面等。所谓稳定排序指的是,不管在排序前后,待排序的若干相等元素的相对位置是恒定不变,换句话来说就是,假设元素A与B元素值相等,同时排序前元素A先于元素B,那么在排序过程结束后,元素A也必须先于元素B,我们称这样的排序算法是稳定排序算法。... 阅读全文
posted @ 2012-09-05 11:00 JackyBing 阅读(1045) 评论(3) 推荐(0) 编辑
摘要: 概念原理 遗传算法是计算数学中用于解决最优化的搜索算法,是进化算法的一种。进化算法最初是借鉴了进化生物学中的一些现象而发展起来的,这些现象包括遗传、突变、自然选择以及杂交等。 遗传算法通常实现方式为一种计算机模拟。对于一个最优化问题,一定数量的候选解(称为个体)的抽象表示(称为染色体)的种群向更好的解进化。传统上,解用二进制表示(即0和1的串),但也可以用其他表示方法。进化从完全随机个体的种群... 阅读全文
posted @ 2012-09-02 11:56 JackyBing 阅读(5447) 评论(0) 推荐(0) 编辑
摘要: 网上的一道指针面试题,分析程序输出结果! 程序一: 1: int main ( ) 2: { 3: char *str[]={"welcome","to","fortemedia","Nanjing"}; 4: char * * p=str+1; //p存储 "to"字符串地址的地址,即&str[1] 5: 6: ... 阅读全文
posted @ 2012-08-27 13:50 JackyBing 阅读(1411) 评论(5) 推荐(1) 编辑
摘要: 生产者与消费者问题:有限缓冲前提;信号量mutex提供了对有限缓冲区互斥访问要求,初始化为0;信号量empty和full分别用来表示当前空缓冲区数量和满缓冲区数量。empty初始化为n,full初始化为0; 生产者代码: 1: do{2: produce an item in the current loop3: wait(empty);//查询缓冲区是否... 阅读全文
posted @ 2012-08-14 21:35 JackyBing 阅读(330) 评论(0) 推荐(0) 编辑
摘要: Hashtable在C++的STL里占据着比较重要的一席之地。其中的hash_set、hash_map、hash_multiset、hash_multimap四个关联容器都是以hashtable为底层实现方法(技巧)。应该说,上述的四个关联式容器提供的api都是对hashtable原生态api的高层封装,因为hashtable本身都提供了它们所需要的基础api。接下来,说说自己对hashtabl... 阅读全文
posted @ 2012-08-12 16:24 JackyBing 阅读(7108) 评论(0) 推荐(1) 编辑
摘要: copy()算法可将输入区间[first,last)内的元素复制到输出区间[result,result+(last-first))内。也就是说,它会执行赋值操作,即:*result=*first,*(result+1)=*(first+1),...依此类推。 而无论在客户端还是针对stl内部实现而言,copy()都是一个常常被调用的函数。由于copy()进行的是复制操作,而复制操作不外乎运用as... 阅读全文
posted @ 2012-08-12 16:21 JackyBing 阅读(1885) 评论(0) 推荐(0) 编辑
摘要: 关于点是否在三角形内(落在边线上亦可)问题的解法,大体有两种: 1、根据面积来求解: 当点D落于三角形内时,图1所示,则由D与A,B,C三个顶点所组成的三个三角形面积之和即为外围三角形面积:S(ABC)=S(ABD)+S(BCD)+S(ACD) 当点D落于三角形外时,图2所示,则由D与A,B,C三个顶点所组成的三个三角形面积之和应该大于原三角形面积之和,多出了面积S(ACD):S(ABC)<S(A... 阅读全文
posted @ 2012-08-12 16:17 JackyBing 阅读(582) 评论(0) 推荐(2) 编辑
摘要: 有一个桶,里面有白球、黑球各100个,人们必须按照以下规则把球取出来: 每次从桶里面拿两个球 如果是两个同色的球,就再放入一个黑球; 如果是两个异色的球,就再放入一个白球。 问题是:最后桶里面只剩下一个黑球的概率是多少? 针对这样一个问题,我们有两种不一样的解法: 方法一: 首先,我们可以通过相应的数学式来建立与上述三个条件等同的表达方式。在这里,我们可以使用集合的概念来表示,如(... 阅读全文
posted @ 2012-08-12 16:14 JackyBing 阅读(1976) 评论(4) 推荐(0) 编辑
摘要: 众所周知,JUnit在java言阵营中测试框架普及率始终居于领先的位置,甚至可以说是最受欢迎的基础测试框架。随着JUnit4的推出,更是大大简化了广大测试人员在编写日常基础测试api的工作量。JUnit4放弃了过去严格的命名规范和继承层次,转而推崇java 5注释的灵活性借助Java 5注释,JUnit4比以前更轻、也更更灵活,下面是一份关于JUnit4新功能的快速列表: 参数测试 异常测试... 阅读全文
posted @ 2012-08-10 09:18 JackyBing 阅读(1035) 评论(0) 推荐(1) 编辑