◎筱米加步枪◎.Blog

Happy coding

模版方法模式

模版方法模式,简单来说就是封装了算法的骨架,将一些可变的部分延迟到之类中实现。

模版方法模式使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定的步骤。

模版方法模式的结构图如下:

以一个例子来说明模版模式吧,也是参考网上总结的。

我们知道,两个人从认识到结婚,是要经历一些过程的,比如初次见面、吃饭、约会、婚礼等一系列过程,每个人都要经历这些阶段,但是每个人的这些过程实现都是不一样的,典型的特例,以穷人和富人,他们实施这些事情的时候,具体肯定是不一样的。请看代码:

1.婚恋的抽象类。【模版类】

/**
 * 一个【爱】的抽象类,描述了属于两个人婚恋的过程,
 * 从相遇到吃饭,到约会,最后到结婚
 * 
 * @author ChenST
 * 
 * @create 2010-3-22
 */
public abstract class Love {
	
	/**
	 * 两个人见面的过程
	 */
	public abstract void meet();
	
	/**
	 * 两个人吃饭的过程
	 */
	public abstract void dinner();
	
	/**
	 * 两个人约会的过程
	 */
	public abstract void appointment();
	
	/**
	 * 两个人结婚的过程
	 */
	public abstract void wedding();
	
	/**
	 * 两个人爱情的一个模版(模版方法)//final为了不被之类覆盖
	 */
	public final void loveTemplate(){
		if(this.doMarray()){
			this.meet();
			this.dinner();
			this.appointment();
			this.wedding();
		}
	}
	
	/**
	 * 两个人是否要结婚,是的话返回true,否则返回false (钩子方法)
	 * 可由子类来控制
	 * @return
	 */
	public boolean doMarray(){
		return true;
	}
}

2.【穷人】的婚恋过程

/**
 * 【穷人】的恋爱过程
 * 
 * @author ChenST
 * 
 * @create 2010-3-22
 */
public class PoolerLove extends Love {

	@Override
	public void appointment() {
		System.out.println("去爬免费的山,当作运动!");
	}

	@Override
	public void dinner() {
		System.out.println("去沙县吃扁肉拌面!");
	}

	@Override
	public void meet() {
		System.out.println("借了一套西装,与女孩见面!");
	}

	@Override
	public void wedding() {
		System.out.println("摆一桌酒,一家人吃的开开心心!");
	}
}

3.【富人】的婚恋过程

/**
 * 【富人】的婚恋过程
 * 
 * @author ChenST
 * 
 * @create 2010-3-22
 */
public class RicherLove extends Love{

	@Override
	public void appointment() {
		System.out.println("玩遍中国的大江南北,爱国!");
	}

	@Override
	public void dinner() {
		System.out.println("天天吃香格里拉!");
	}

	@Override
	public void meet() {
		System.out.println("穿名牌西装,约在香格里拉酒店见面!");
	}

	@Override
	public void wedding() {
		System.out.println("婚礼全国直播!");
	}
}

4.测试类

/**
 * 测试类
 * 
 * @author ChenST
 * 
 * @create 2010-3-22
 */
public class Test {
	
	public static void main(String[] args) {
		System.out.println("穷人恋爱过程");
		//穷人恋爱过程
		Love pooler=new PoolerLove();
		//调用恋爱模版
		pooler.loveTemplate();
		
		System.out.println("\n富人恋爱过程");
		//富人恋爱过程
		Love richer=new RicherLove();
		//调用恋爱模版
		richer.loveTemplate();
	}
}

5.运行结果:

穷人恋爱过程
借了一套西装,与女孩见面!
去沙县吃扁肉拌面!
去爬免费的山,当作运动!
摆一桌酒,一家人吃的开开心心!

富人恋爱过程
穿名牌西装,约在香格里拉酒店见面!
天天吃香格里拉!
玩遍中国的大江南北,爱国!
婚礼全国直播!

可以看到结果,模版方法的好处就是,你还可以根据自己的特点,实现自己的婚恋过程,只需调用恋爱模版即可~~

MyEclipse中JS文件显示中文乱码解决方案

以前出现的问题,前几天小杨也出现此问题,因此备忘下:

在MyEclipse中JS文件显示问题,有中文的地方都变成看不懂的乱码~~只需要设置下MyEclipse的一些属性即可~~具体方法如下:

【Window】>>【Preferences】在出现的窗口中选【MyEclipse】>>【Files and Editors】>>【JavaScript】在右边的【Encoding】下拉框中选为【Chinese,National Standard】即可。

如图:

职场培训-《客户要数据库结构文件》

昨日在公司进行了一场职场培训,后面一个环节,是游戏环节,我抽到的题目如下:

【题目】
你正在申银万国证卷做E-SIM6.0工程,跟你关系很好的客户向你索要E-SIM6.0的数据库结构文件,理由是日常维护需要,你如何处理?(1人饰演申银万国客户,1人饰演接我司工程人员)

我演客户,刘伟演工程人员。对白略~~

【点评】

从我司的立场上来讲,这个数据库文件是肯定不能给的,但是对方又是我们公司的一个长期来往的客户,不能伤了和气。所以怎么样委婉的拒绝是这个工程人员应该要做的。

题目中提到,对方和自己的关系很好,因此可以利用这个关系,可以委婉的和对 方说:“这种文件公司明确是不能给的,老兄你总不会让我丢了饭碗把~呵呵~”

既然拒绝了,但是为客户服务是我们的宗旨,你可以提供相关非必要的文件来满足 客户,接着你还可以说:“为了你的日常维护需要,我们公司可以提供给你一些图表文件,让你们更能了解系统。”

作为工程人员,要发挥自己的专长,就是技术, 你可以和客户讲一些你的见解,但是要讲的他们觉得你很有道理,比如你可以说:“通过这个图表文件,可以怎么样怎么样的更好了解系统,比看数据库文件更能了 解系统”..总之,在职场上,要学会随机应变的去说服客户,切忌不要和客户起冲突或者某种程度上让客户不高兴。

WindowsXP下的远程桌面使用

学习了勇哥的方法~~百度了些资料~~摘自百科的一些资料,对于远程桌面的使用总结如下:

1.远程桌面连接功能的启用

第一步:在桌面“我的电脑”上点鼠标右键,选择“属性”。

第二步:在弹出的系统属性窗口中选择“远程”标签。

第三步:在远程标签中找到“远程桌面”,在“容许用户连接到这台计算机”前打上对勾后确定即可完成XP下远程桌面连接功能的启用。

2.使用远程桌面的方法

第一步:通过命令号运行:mstsc

第二步:在界面中的“计算机”处输入开启了远程桌面功能的计算机IP地址。

第三步:点击“连接”按钮后会出现一个“登陆到Windos”的对话框,注意:这时在输入对方电脑的用户名及密码(如没密码要创建一个密码)点“确定”,我们就可以成功登录到该计算机上了,连接上去后如图5所示,和操作自己计算机一样方便一样快捷。 (对方的机要开启了允许远程连接到此计算机,具体做法是,我的电脑=>属性=>远程=>远程桌面,把勾打上.确定)

"Internet Explorer无法打开站点"的解决方法

访问自个的作业~~总是出现 "Internet Explorer无法打开站点" 的问题~~网上查了~~很多人说是病毒问题,但是其他网页都输入可以~~

查了许久,找到了答案:

原来是我的页面的问题,页面的其中一段代码如下:

<SCRIPT Language="JavaScript" SRC="<%=path %>/js/class_MTree.js" 
type="text/javascript"></SCRIPT>

原因是因为页面还没加载完就去执行了外部文件吧~~

解决方法是是用JavaScript中的 defer 属性,defer 属性只会判断当前页面是否加载完毕,若加载完毕,就执行脚本,修改后的代码如下:

<SCRIPT Language="JavaScript" SRC="<%=path %>/js/class_MTree.js" 
type="text/javascript" defer="defer"></SCRIPT>

MyEclipse中Jboss启动出现Java heap space解决方案

今日,在自己的电脑上跑公司的平台,在MyEclipse中启动JBOSS,结果报:

java.lang.OutOfMemoryError: Java heap space 异常,用jboss中的run.bat启动,则正常运行,而在MyEclipse中启动就报异常,百度之~~得解:

原因是对于很大的Web工程(公司的这个平台确实够大),jboss默认分配空间无法启动,因此出现了内存溢出,因此需要去设置Java虚拟机的堆栈大小,

所以解决方法如下:

1.设置环境变量:set JAVA_OPTS= -Xms512m -Xmx1024m

但是如果在MyEclipse中启动Jboss的话还要进行如下操作:

window>>preferences>>MyEclipse>>Application Servers>>JBoss>>JBoss x.x>>JDK中的【Optional Java VM arguments】中添加如下字符串:

-Xmx1024M -Xms512M -XX:MaxPermSize=256m

点击OK即可解决~~(偶是这么解决的~~)

如图:

如果还不行,继续如下操作:(良哥教的~~)

window>>preferences>>MyEclipse>>Application Servers>>JBoss>>JBoss x.x中的【Optional program arguments】中添加如下字符串:

-c default -b 0.0.0.0

如图:


Strust异常:JasperException①NestedWriteNestingTei

昨日,基于公司的框架,并使用了Struts进行了开发和配置信息,结果访问时出现如下异常:

Failed to load or instantiate TagExtraInfo class: 
org.apache.struts.taglib.nested.NestedWriteNestingTei

网上说是因为包冲突问题,于是乎得到解决方案如下:

只要删除掉部署后的 /WEB-INF/lib 下的 jsp-api.jarservlet-api.jar 包即可~~

PL/SQL笔记之table和record类型

今天,继续学了PL/SQL的语法,总结下table和record类型的知识:

①table类型(table有点 类似于可增长的数组)

    举两个例子:

/*
 *  ①定义一个user_table_type类型,
 *  这个类型中的元素属性类型是和t_user表中username字段一样的.
 */
Type user_table_type Is Table Of t_user.username%Type 
Index By Binary_Integer;

/* 声明一个user_table_type类型的变量user_table */
user_table  user_table_type


/*
 *  ②定义一个user_table_type类型,
 *  这个类型中的元素属性类型是和t_user表中一行记录类型一样的。
 */
Type user_table_type Is Table Of t_user%Type 
Index By Binary_Integer;

②record类型(可根据需要定义所想要的类型,一般是用于保存数据库中取出的行信息,有点类似于C语言中的结构体)

  举一个例子:

/*
 *  定义一个记录类型,是有number和varchar2(25)类型构成
 */
Type user_record_type IS RECORD
(  
    userid number,
    username varchar2(25)
);

/* 定义一个user_record_type类型的变量user_record */
 user_record user_record_type;

PS:table可以看作是多行单列,record可以看作是单行多列,二者合起来就是多行多列,可保存查询出来的记录。

PL/SQL笔记之%type和%rowtype

昨晚学习了下PL/SQL的基本语法~对于属性%type和%rowtype作了一些了解。笔记总结如下:

1.%type属性

declare     v_userid      t_user.userid%type 

/*** 表示声明一个变量v_userid,这个变量的类型是和t_user表中的userid属性一样。
使用%type属性的好处: v_userid的类型可以根据t_user.userid的类型动态的改变,当t_user.userid的类型改变时,而不用大量的去修改程序代码。 ***/

2.%rowtype属性

declare    v_userRecord         t_user%rowtype

/*** 表示v_userRecord是一个记录,该记录中的字段将与t_user表中的列相对应。
使用%rowtype的好处:v_userRecord记录的结构可以根据t_user表结构的改变而动态的改变。不用大量修改程序的代码。***/


PL/SQL之dbms_output.put_line不显示结果解决方法

今天练习PL/SQL的时候~想用dbms_output.put_line来输出变量的一些信息,却总是看不到结果~~百度之~~

得到解决方法:

原来要先输入以下代码才可以:

SQL>set serveroutput on

之后再用dbms_output.put_line输出就可以了~~