设计模式学习总结-策略模式

定义

它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。

解析

  1. 策略模式中体现了两个非常基本的面向对象设计的基本原则:封装变化的概念;编程中使用接口,而不是对接口实现。
  2. 策略模式使开发人员能够开发出由许多可替换的部分组成的软件,并且各个部分之间是弱连接的关系(聚集)。弱连接的特性使软件具有更强的可扩展性,易于维护;更重要的是,它大大提高了软件的可重用性。
  3. 同时策略模式还体现了开放封闭原则:对扩展开放,对修改封闭。

UML图

代码示例

// 定义了所有支持的算法的公共接口
public inter[......]<p class="read-more"><a href="http://neoremind.com/2010/12/strategy_design_pattern/">继续阅读</a></p>

网络联盟营销初学笔记

什么是网站联盟?

网站联盟,通常指网络联盟营销、网络会员联盟,也称联属网络营销。

网站联盟的角色有哪些?

广告主联盟会联盟营销平台,不要忘了还有客户

广告主按照网络广告的实际效果(如点击率、交易额等,产生此效果可以通过很多形式如CPCCPSCPM等等,接下来再详细介绍),向联盟会员支付合理的广告费用,节约营销开支,提高营销质量。

联盟会员(可以理解为宿主)则通过网络联盟营销管理平台,选择合适的广告主并通过播放广告主广告提高收益,同时节约大量的网络广告销售费用,轻松地把网站访问量变成收益。

常见的联盟营销平台就有G[……]

继续阅读

如何自动备份Godaddy服务器上MySQL数据库

最近鼓捣的网站架设在美国知名的“去他爹(Godaddy)”上面,购买的web hosting(空间)方案是Deluxe的,所以可以支持Tomcat服务器,从而可以把自己基于Java Web写的网站部署上去。本文的重点不在于评论架设Java Web Application到Godaddy Server,但是我确实经历的一些痛苦并且漫长的过程,有时间再总结下经验;本文主要讨论如何自动备份数据库,请注意这里要自动备份,也就是定时的。

如果发信给去他爹客服询问关于自动备份,他们会建议你购买Dedicated Server,也就是独立服务器(而这需要上千RMB/年,一般用户包括我自己选择的都是sh[……]

继续阅读

从排序二叉树到红黑树与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. 为什么要用存储过程

1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
3.存储过程可以重复使用,可减少数据库开发人[……]

继续阅读

8种数据库select前N条记录的方法

1. ORACLE

SELECT * FROM TABLE1 WHERE ROWNUM&lt;=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>