设计模式学习总结-策略模式
定义
它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。
解析
- 策略模式中体现了两个非常基本的面向对象设计的基本原则:封装变化的概念;编程中使用接口,而不是对接口实现。
- 策略模式使开发人员能够开发出由许多可替换的部分组成的软件,并且各个部分之间是弱连接的关系(聚集)。弱连接的特性使软件具有更强的可扩展性,易于维护;更重要的是,它大大提高了软件的可重用性。
- 同时策略模式还体现了开放封闭原则:对扩展开放,对修改封闭。
UML图
代码示例
// 定义了所有支持的算法的公共接口 public inter[......]<p class="read-more"><a href="http://neoremind.com/2010/12/strategy_design_pattern/">继续阅读</a></p> |
网络联盟营销初学笔记
如何自动备份Godaddy服务器上MySQL数据库
从排序二叉树到红黑树与AVL树
概述:本文从排序二叉树作为引子,讲解了红黑树,最后把红黑树和AVL树做了一个比较全面的对比。
1 排序二叉树
排序二叉树是一种特殊结构的二叉树,可以非常方便地对树中所有节点进行排序和检索。 排序二叉树要么是一棵空二叉树,要么是具有下列性质的二叉树: • 若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值; • 若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值; • 它的左、右子树也分别为排序二叉树。 下图显示了一棵排序二叉树:
对排序二叉树,若按中序遍历就可以得到由小到大的有序序列。中序遍历得: {2,3,4,8,9,9,10,[……]
MySQL简单操作笔记
mysql> show databases;
//察看数据库列表
mysql> use ertlzw;
//显示ertlzw库中的数据列表
Database changed
mysql> show tables;
//显示ertlzw库中的数据列表
8 rows in set (0.00 sec)
mysql> describe article;
//显示ertlzw库中的数据列表中的article表结构
8 rows in set (0.00 sec)
mysql> use ertlzw;
//显示ertlzw库中的内[……]
设计模式学习总结-观察者模式
定义
Observer模式的意图是“定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新”。
从这段话里我们可以得到两个信息,如下:
1 观察者(具体执行操作的对象,有多个)
2 被观察者(顾名思义是被观察的对象,如果该对象发生某些变化则通知观察者执行对应的操)
UML图
代码实例
下面展示了一个简单的观察者模式,或者说监听器的实现。Subject对象集成了Observable抽象类,具有的加入监听器的功能,同时当其执行业务逻辑时,即出发监听器,各个监听器均执行update方法。
Observer 接口:
pu[......]<p class="read-more"><a href="http://neoremind.com/2010/12/observer_design_pattern/">继续阅读</a></p> |
数据库存储过程以及用JDBC API调用的示例
1. 存储过程定义
将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。
2. 为什么要用存储过程
8种数据库select前N条记录的方法
1. ORACLE
SELECT * FROM TABLE1 WHERE ROWNUM<=N |
2. INFORMIX
SELECT FIRST N * FROM TABLE1 WHERE 1=1 |
3. MYSQL
SELECT * FROM TABLE1 WHERE 1=1 LIMIT N |
LIMIT子句可以用来限制由SELECT语句返回过来的数据数量,它有一个或两个参数,如果给出两个参数,
第一个参数指定返回的第一行在所有数据中的位置,从0开始(注意不是1),第二个参数指定最多返回行
数。例如:
SELECT * FROM TABLE LIMIT 5,10; #返回第[......]<p class="read-more"><a href="http://neoremind.com/2010/12/fetch_first_n_rows_in_d/">继续阅读</a></p> |
JDBC中Statement与PreparedStatement的区别
1. statement每次执行sql语句,相关数据库都要执行sql语句的编译;preparedstatement是预编译的, 采用Cache机制(预编译语句,放在Cache中,下次执行相同SQL语句时,则可以直接从Cache中取出来,有利于sql生成查询计划。),对于批量处理可以大大提高效率. 也叫JDBC存储过程。
例如,如果要执行两条sql语句
SELECT colume FROM TABLE WHERE colume=1; SELECT colume FROM TABLE WHERE colume=2; |
会生成两个执行计划
一千个查询就生成一千个执行计划!
P[……]
ThreadLocal的理解与在Spring中的应用
一 引子
首先我们先来看一下Spring框架中是如何使用数据库模板的。
数据库表:
CREATE TABLE users ( id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, name VARCHAR(32) NOT NULL, passwor[......]<p class="read-more"><a href="http://neoremind.com/2010/11/threadlocal_learn/">继续阅读</a></p> |
DAO接口:
public interface UsersDao { public boolean insert(Users users) throws Exception; public Users select(int id) thr[......]<p class="read-more"><a href="https://neoremind.com/2010/11/threadlocal_learn/">继续阅读</a></p> |
设计模式学习总结-装饰模式
一 定义
装饰模式是在不必改变原类文件和不使用继承的情况下,而是使用组合的方式动态的扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
二 装饰模式的特点
(1) 装饰对象和真实对象有相同的接口。这样客户端对象就可以以和真实对象相同的方式和装饰对象交互。
(2) 装饰对象包含一个真实对象的索引(reference)
(3) 装饰对象接受所有的来自客户端的请求。它把这些请求转发给真实的对象。
(4) 装饰对象可以在转发这些请求以前或以后增加一些附加功能。这样就确保了在运行时,不用修改给定对象的结构就可以在外部增加附加的功能。
三 UML图[……]
抽象工厂方法与工厂方法模式的区别
对于java来说,你能见到的大部分抽象工厂模式都是这样的:它的里面是一堆工厂方法,每个工厂方法返回某种类型的对象。
比如说工厂可以生产鼠标和键盘。那么抽象工厂的实现类(它的某个具体子类)的对象都可以生产鼠标和键盘,但可能工厂A生产的是罗技的键盘和鼠标,工厂B是微软的。这样A和B就是工厂,对应于抽象工厂;每个工厂生产的鼠标和键盘就是产品,对应于工厂方法;用了工厂方法模式,你替换生成键盘的工厂方法,就可以把键盘从罗技换到微软。但是用了抽象工厂模式,你只要换家工厂,就可以同时替换鼠标和键盘一套。如果你要的产品有几十个,当然用抽象工厂模式一次替换全部最方便(这个工厂会替你用相应的工厂方法)[……]
设计模式学习总结-工厂方法模式
从简单工厂方法模式到工厂方法模式
简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。
工厂方法模式定义
一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
代码示例
下面以简单工厂方法中提到的计算器的例子来用代码示例:
工厂类
public interface IFactory { public Operation createOperation(); } public class AddFactory implements IFac[......]<p class="read-more"><a href="http://neoremind.com/2010/11/%e8%ae%be%e8%ae%a1%e6%a8%a1%e5%bc%8f%e5%ad%a6%e4%b9%a0%e6%80%bb%e7%bb%93-%e5%b7%a5%e5%8e%82%e6%96%b9%e6%b3%95%e6%a8%a1%e5%bc%8f/">继续阅读</a></p> |
Java中finally的辨析
一、finally一定会执行吗?
二、下面语句的执行结果是:
public class FinallyTest { public static void main(String[] args) { System.out.printl[......]<p class="read-more"><a href="http://neoremind.com/2010/11/java_finally/">继续阅读</a></p> |
关于构造函数在继承情况下的辨析
首先看一个例子:
class Person { private String name=""; private int age=0; public Person() { System.out.println("person无参数构造函数"); } public Per[......]<p class="read-more"><a href="http://neoremind.com/2010/11/java_contructor_when_extends/">继续阅读</a></p> |