
Java
事后诸葛亮
深入浅出!
展开
-
插入排序!!!
package sort; /* 插入排序: 插入排序总是假设指定位置的左边的数组是有序的,而后将指定位置的值插入左边的有序数组。 指定的位置从下标1开始,每次循环递增1,直到数组结束。 */ public class Insert { public static void main(String[] args) { int[] a = new int[] { 6, 4, 2, 5, 3, 0, 9, 7, 8, 1 }; sort(a); for (int原创 2010-09-13 13:18:00 · 428 阅读 · 0 评论 -
设计模式——工厂方法模式【Factory Method Pattern】
<br />女娲补天的故事大家都听说过吧,今天不说这个,说女娲创造人的故事,可不是“造人”的工作,这个词被现代人滥用了。这个故事是说,女娲在补了天后,下到凡间一看,哇塞,风景太优美了,天空是湛蓝的,水是清澈的,空气是清新的,太美丽了,然后就待时间长了就有点寂寞了,没有动物,这些看的到都是静态的东西呀,怎么办?别忘了是神仙呀,没有办不到的事情,于是女娲就架起了八卦炉(技术术语:建立工厂)开始创建人,具体过程是这样的:先是泥巴捏,然后放八卦炉里烤,再扔到地上成长,但是意外总是会产生的: <br />第一次烤泥人原创 2011-01-25 22:14:00 · 921 阅读 · 0 评论 -
设计模式——门面模式【Facade Pattern】
大家都是高智商的人,都写过纸质的信件吧,比如给女朋友写情书什么的,写信的过程大家都还记得吧,先写信的内容,然后写信封,然后把信放到信封中,封好,投递到信箱中进行邮递,这个过程还是比较简单的,虽然简单,这四个步骤都是要跑的呀,信多了还是麻烦,比如到了情人节,为了大海捞针,给十个女孩子发情书,都要这样跑一遍,你不要累死,更别说你要发个广告信啥的,一下子发1千万封邮件,那不就完蛋了?那怎么办呢?还好,现在邮局开发了一个新业务,你只要把信件的必要信息高速我,我给你发,我来做这四个过程,你就不要管了,只要把信件交给我原创 2011-01-26 22:05:00 · 692 阅读 · 0 评论 -
设计模式——建造者模式【Builder Pattern】
<br />我们先把我们最基本的对象Product在类图中表明出来:<br /><br />我们定义了一个CarModel的抽象类,其中run和setSequence是由抽象类实现的,其他都是子类自己实现,那这个是否可以解决这个问题呢?应该可以,我们把代码实现出来,先看CarModel.java程序:<br />package builder.pattern; import java.util.ArrayList; /** * 定义一个车辆模型的抽象类,所有的车辆模型都继承这里类 */ pub原创 2011-01-26 23:11:00 · 756 阅读 · 0 评论 -
设计模式——策略模式【Strategy Pattern】
<br />刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,说是按天机拆开解决棘手问题,嘿,还别说,真是解决了大问题,搞到最后是周瑜陪了夫人又折兵呀,那咱们先看看这个场景是什么样子的。先说这个场景中的要素:三个妙计,一个锦囊,一个赵云,妙计是小亮同志给的,妙计是放置在锦囊里,俗称就是锦囊妙计嘛,那赵云就是一个干活的人,从锦囊中取出妙计,执行,然后获胜,用JAVA程序怎么表现这个呢?我们先看类图:<br /><br />三个妙计是同一类型的东东,那咱就写个接口:<br />package str原创 2011-01-25 21:51:00 · 664 阅读 · 0 评论 -
设计模式——多例模式【Multition Pattern】
<br />这种情况有没有?有!大点声,有没有? 有!,是,确实有,就出现在明朝,那三国期间的算不算,不算,各自称帝,各有各的地盘,国号不同。大家还记得那首诗《石灰吟》吗?作者是谁?于谦,他是被谁杀死的?明英宗朱祁镇,对,就是那个在土木堡之变中被瓦刺俘虏的皇帝,被俘虏后,他弟弟朱祁钰当上了皇帝,就是明景帝,估计当上皇帝后乐疯了,忘记把老哥朱祁镇削为太上皇了,我Shit,在中国的历史上就这个时期是有2个皇帝,你说这期间的大臣多郁闷,两个皇帝耶,两个精神依附对象呀。 <br />这个场景放到我们设计模式中就是叫原创 2011-01-25 22:05:00 · 963 阅读 · 0 评论 -
设计模式——抽象工厂模式【Abstract Factory Pattern】
<br />好了,我们继续上一节课,上一节讲到女娲造人,人是造出来了,世界时热闹了,可是低头一看,都是清一色的类型,缺少关爱、仇恨、喜怒哀乐等情绪,人类的生命太平淡了,女娲一想,猛然一拍脑袋,Shit!忘记给人类定义性别了,那怎么办?抹掉重来,然后就把人类重新洗牌,准备重新开始制造人类。 <br />由于先前的工作已经花费了很大的精力做为铺垫,也不想从头开始了,那先说人类(Product产品类)怎么改吧,好,有了,给每个人类都加一个性别,然后再重新制造,这个问题解决了,那八卦炉怎么办?只有一个呀,要么生产出原创 2011-01-25 22:24:00 · 816 阅读 · 0 评论 -
设计模式——适配器模式【Adapter Pattern】
<br />今天讲适配器模式,这个模式也很简单,你笔记本上的那个拖在外面的黑盒子就是个适配器,一般你在中国能用,在日本也能用,虽然两个国家的的电源电压不同,中国是220V,日本是110V,但是这个适配器能够把这些不同的电压转换为你需要的36V电压,保证你的笔记本能够正常运行,那我们在设计模式中引入这个适配器模式是不是也是这个意思呢?是的,一样的作用,两个不同接口,有不同的实现,但是某一天突然上帝命令你把B接口转换为A接口,怎么办?继承,能解决,但是比较傻,而且还违背了OCP原则,怎么办?好在我们还有适配器模原创 2011-01-26 22:26:00 · 1108 阅读 · 0 评论 -
设计模式——模板方法模式【Template Method Pattern】
我先设计个类图:非常简单的实现,你要悍马模型,我就给你悍马模型,先写个抽象类,然后两个不同型号的模型实现类,那我们把这个程序实现出来: HummerModel抽象类的程序清单如下:package template.method.pattern; /** * 是悍马车辆模型的意思,不是悍马美女车模 */ public abstract class HummerModel { ///首先,这个模型要能够被发动起来,别管是手摇发动,还是电力发动,反正是要能够发动起来,那这个实现要在实现类里了原创 2011-01-26 22:37:00 · 1686 阅读 · 0 评论 -
设计模式——桥梁模式【Bridge Pattern】
今天我要说说我自己,梦想中的我自己,我身价过亿,有两个大公司,一个是房地产公司,一个是服装制造业,这两个公司都很赚钱,天天帮我在累加财富,其实是什么公司我倒是不关心,我关心的是是不是在赚钱,赚了多少,这才是我关心的,我是商人呀,唯利是图是我的本性,偷税漏税是我的方法,欺上瞒下、压榨员工血汗我是的手段嘛,我先用类图表示一下我这两个公司: 类图很简单,声明了一个Corp抽象类,定义一个公司的抽象模型,公司首要是赚钱的,不赚钱谁开公司,做义务或善举那也是有背后利益支撑的,我还是赞成这句话“天下熙熙,皆为利来;天下原创 2011-01-26 23:20:00 · 1005 阅读 · 1 评论 -
设计模式——单例模式【Singleton Pattern】
<br />这个模式是很有意思,而且比较简单,但是我还是要说因为它使用的是如此的广泛,如此的有人缘,单例就是单一、独苗的意思,那什么是独一份呢?你的思维是独一份,除此之外还有什么不能山寨的呢?我们举个比较难复制的对象:皇帝。中国的历史上很少出现两个皇帝并存的时期,是有,但不多,那我们就认为皇帝是个单例模式,在这个场景中,有皇帝,有大臣,大臣是天天要上朝参见皇帝的,今天参拜的皇帝应该和昨天、前天的一样(过渡期的不考虑,别找茬哦),大臣磕完头,抬头一看,嗨,还是昨天那个皇帝,单例模式,绝对的单例模式,先看类图:原创 2011-01-25 22:02:00 · 939 阅读 · 0 评论 -
设计模式——代理模式【Proxy Pattern】
<br />什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道被代理人能做哪些事情不能做哪些事情吧,那就是两个人具备同一个接口,代理人虽然不能干活,但是被代理的人能干活呀。比如西门庆找潘金莲,那潘金莲不好意思答复呀,咋办,找那个王婆做代理,表现在程序上时这样的: <br />先定义一种类型的女人:<br />package proxypattern; /** * 定义一种类型的女人,王婆和潘金莲都属于这个类型的女人 */ public interface K原创 2011-01-25 21:57:00 · 683 阅读 · 0 评论 -
冒泡排序!!!
<br />package sort; /* 冒泡排序: 假设一个数组有n个元素,从数组的最左边开始,比较0号位置和1号位置元素的大小。 如果0号元素大,就让两个元素交换。如果1号元素大,就什么也不做。 然后右移一位,比较1号位置和2号位置元素的大小,和刚才一样,如果1号元素大,则交换。 照这样依次比较下去,一直到数组的最右端。最大的元素已经被排在最右边了。 因为在算法执行的时候,最大的数据项总是“冒泡”到数组的顶端,所以叫做冒泡排序。 现在重新回到数组的最左端开始第二趟排原创 2010-09-13 13:17:00 · 484 阅读 · 0 评论 -
选择排序!!!
<br />package sort; /* 选择排序: 将数组中所有的数据项扫描一趟,从中选出最小的一个。最小的和数组的0号元素交换位置。 现在最左端的数据项就是有序的了。再次扫描数组,从1号位置开始,还是找最小的,然后和1号位置的元素交换。 这个过程持续到所有数据项排定。 */ public class Select { public static void main(String[] args) { int[] a = new int[] { 6, 4, 2,原创 2010-09-13 13:17:00 · 362 阅读 · 0 评论 -
Java数据结构!!!
线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构。这些类均在java.util包中。本文试图通过简单的描述,向读者阐述各个类的作用以及如何正确使用这些类。 Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└Set ├HashSet └TreeSetMap├Hashtable├TreeMap├HashMap└WeakHashMapCollection是集合类的上级接口,继承与他的原创 2010-09-15 22:38:00 · 464 阅读 · 0 评论 -
Java流控制文件上传!!!
import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class Test { public static void main(String[] args) { FileReader reader = null; FileWriter writer = null; try原创 2010-09-29 09:40:00 · 1228 阅读 · 0 评论 -
java core1 —— 笔记1!!!
/* * 这里明显外面一个死循环,但是用break却能跳出两层循环。 */public static void main(String[] args) { wl: while (true) { System.out.println("------while-----"); for (int i = 0; i System.out.println("------for" + i + "-----"); if (i == 6) { break wl; } } }}/* * jdk5.0原创 2010-11-29 19:54:00 · 661 阅读 · 0 评论 -
java core1 —— 笔记2!!!
<br />/* 构造方法不能被子类继承,但创建子类时,父类的构造方法要调用一次。默认情况下调用无参数的构造方法。 如果父类没有无参数的构造方法,子类不允许被继承,解决办法: 1. 在父类重载一个无参数的构造方法 2. 在子类手动调用一次父类的构造方法。Super("sdf"); 使用super调用构造函数的语句必须是子类构造函数的第一家句。 abstract抽象 抽象类定义抽象方法,抽象方法必须被重写。 有抽象方法的类必须被定义为抽象类。 抽象类不能被实例化,不能产生对象。 */原创 2010-11-30 22:12:00 · 546 阅读 · 0 评论 -
Java——socket!!!
<br />import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; impo原创 2010-12-05 14:53:00 · 713 阅读 · 0 评论 -
在线聊天系统雏形!!!
<br />ChatServer <br />import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.EOFException; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.net.SocketException; import java.util.原创 2010-12-06 20:32:00 · 947 阅读 · 0 评论 -
Java——Thread!!!
<br />/* 线程:一个程序里面不同的执行路劲。 synchronized:线程同步。 Thread: sleep(long millis) 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)。 join([long millis]) 等待该线程终止,最长为 millis 毫秒。 yield() 暂停当前正在执行的线程对象,并执行其他线程。 Object: wait([long timeout]) 导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAl原创 2010-12-06 20:30:00 · 615 阅读 · 0 评论 -
java下载网络文件并重命名
文件下载,通过也是可以的,但是这样直接下载,一般文件名就是服务器端的没有任何意义的文件名。 今天自己用到了另外一种,先说需求:1.文件服务器与系统没有在同一服务器,所以需要使用网络地址来进行下载; 2.上传时为了避免文件重名,使用uuid来生成了文件名,真实的文件名存与数据库中; 3.所有的文件都只能下载,不可直接在浏览器上打开。 根据代码来分析:这里使用的springmv转载 2017-06-19 09:33:09 · 3216 阅读 · 0 评论