妙解Hibernate 3.x——叩响面向对象思想之门 读书笔记

妙解Hibernate 3.x——叩响面向对象思想之门 读书笔记
在今年过生日的时候公司送了这本书给我,是部门老大挑的
找些时间看了下,由于在工作中并没有用到Hibernate,所有大部分内容没有看,
只看了前面的几章,当看到第三章,觉得仅第三章,这本书都值得一看(后面的章节由于用不到hibernate,只是简单过一遍)
第三章,看了不下三遍,觉得自己在某些地方还是看不懂,可能是对于面向对象的一些东西的理解还不够

使用继承、委托看待和拆解设计模式

将对象做虚,做软,不要被“变因”硬邦邦地绑住
—-封装变化

生成对象时,不直接new,才不会被具体对象绑死,此原则在学习面向对象中的创建模式有很好的指导作用
—-封装创建过程

模板方法与策略都将算法提取出来,只不过模板方法使用的是继承,策略使用的是委托
—-其实就这种模式,其本质应该是在其封装的变化的不同,模板方法是封装部分算法,而策略是封装整个算法
策略的重用性会高一些,只是需要付出一些额外的代价

回归最根本的面向对象思想:封装、继承、多态、委托

关于设计模式的学习:
1、接口、抽象类、具体对象是软件“软性”的指标之一,可按照实际需要的稳定性加以调整
2、研究模式三部曲:明确要解决的问题–>怎么解–>套用模式所带来的好处和副作用
3、从代码级看设计模式:
去掉new
去掉if/switch…case.
去掉重复的代码
4、开始接触一个新的设计模式,如果领导不到使用该模式的好处,不妨动手写一段程序,再来跟书中的实例进行比较
5、不时和自己的心灵对话—用自己的话来诠释模式,哪怕是简短的一句话,一个口诀,一个比喻
Builder 单一制程,不同风格
Sigleton just only one
Prototype 复制
Adapter 转换
Composite Tree
Decorator Dynamic composing behavior
Facade 简化
Proxy 本体/分身相互成就
Momento 借尸还魂
Strategy 替换多变的内部行为
6、不同的设计模式可能极其相似,搞不清是因为没有彻底掌握,这需要时间的积累
7、设计模式老是记不住,无法突破,那就放弃,过段时间再来温故知新
8、运用面向对象和设计模式,切忌矫枉过正,不要好处没得到,却被过度设计给弄复杂了

从Think in Data 到Think in Object

–EOF–

老公搞笑集

某天晚上,头撞到墙上了,很响,老公转过身来,摸摸我的头又睡了。
一段时间之后,膝盖又撞墙上了,很响,老公又转过身来,摸摸我的头,又睡了。。。
笑死我了,好想咬。。。

贼喜欢打喷嚏。每次打喷嚏都会被我追问到是谁在想他。
最后得出的经验是,每次打喷嚏都以最快抢在我前面自己喊: 谁? 谁啊?!
我就只能在旁边回答: 是我啦,是我啦~~~

喝爽歪歪,娃哈哈,假哭,洗碗,喜欢小朋友~~~~

续上:
上周末时由于去爬山,把腿爬残了,叫老公买菜回来,第2天发现了冰箱的蔬菜区里面多了一个奇怪的“小南瓜。”
我:“你昨天买南瓜了吗”
老公:“是啊”
我:“你在哪里拿的,你看看这是南瓜吗?”我将小南瓜拿到老公面前。
老公:“就是啊,我在放南瓜的地方拿的。”

我无语了,拿刀子把小南瓜切开,红的,是个西瓜!#%¥%%&……*&EE¥%

晚上做了第2天上班要带的中餐,装好放在沙发前的茶几上开盖凉着,老公在沙发上手舞足蹈的,一脚踩到到自己的便当盒里。我说他第2天吃饭的时候我要打电话问他臭脚饭是不是好吃,他说吃饭的时候死也不带电话。

第2天发信息问时,说已经吃完了~~~~

第一次写MySQL存储过程遇到的关于DELIMITER的问题

第一次写MySQL存储过程遇到的关于DELIMITER的问题
在很久很久以前写过Oracle的存储过程,昨天由于某些特殊的原因导致需要在MySQL中写一些存储过程,只能现学现用了
首先写了一个非常简单的存储过程,但是就是如此简单的过程也报错了,其代码如下:

1
2
3
4
5
 
CREATE PROCEDURE test()
BEGIN
    SELECT 'Hello Word!';                                                               
END

在phpmyadmin及客户端都报错,在phpmyadmin中显示:#1064 – You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ” at line 3

显然,程序在第一个分号后面出错了
原因不明,遂google之,找到如下地址:http://www.cnblogs.com/hsqzzzl/archive/2008/02/21/1076646.html
文章作者有说:分隔符是通知MySQL客户端已经输入完成的符号。一直都是用“;”,但是在存储过程中不行,因为存储过程中很多语句都需要用到分号
于是得到如下所示代码

1
2
3
4
5
6
DELIMITER ||
CREATE PROCEDURE test()
BEGIN
    SELECT 'Hello Word!';                              
END ||
DELIMITER ;

如果不想使用DELIMITER,在phpmyadmin中执行命令时,在Delimiter文本框中填写||

另在百度百科中有说明:http://baike.baidu.com/view/3068266.htm
MySQL中delimit命令。
  这个命令与存储过程没什么关系。
  其实就是告诉mysql解释器,该段命令是否已经结束了,mysql是否可以执行了。
  即改变输入结束符。
  默认情况下,delimiter是分号“;”。
  在命令行客户端中,如果有一行命令以分号结束,
  那么回车后,mysql将会执行该命令。
  但有时候,不希望MySQL这么做。因为可能输入较多的语句,且语句中包含有分号。
  默认情况下,不可能等到用户把这些语句全部输入完之后,再执行整段语句。
  因为mysql一遇到分号,它就要自动执行。
  这种情况下,就可以使用delimiter,把delimiter后面换成其它符号,如//或$$。
  此时,delimiter作用就是对整个小段语句做一个简单的封装。
  此命令多用在定义子程序,触发程序等musql自己内嵌小程序中。