Java饭管开张了,大家来恭喜.
最流行菜品:麻辣三丝(Struts丝,Spring丝,Hibernate丝)
厨师:Java版
小二:Java版
美女:小二,来盆你们店招牌菜。。。。。
小二: 来了,麻辣三丝到了,您慢慢品尝.....(叽叽咕咕一大堆)
美女:烦不烦啊,我的人啊,那来这多苍蝇?????????/@@@@@@@@@@@@@@@(知趣的走开)
JDBC一号:小二,饿死了,快随便来一盆填肚子的
小二:(嘿嘿,又来了个冤大头)麻辣三丝来了.....
.
.
.
终于到晚上12:59 59
收工,累死了
~~~~~~~~~~~~~~~~~~~~
店小,只请了一个小二,要求,服务所有顾客:
小二实现了单例,完成要求
单态模式两种表现方式:单态单例,单态多例
很久以来,一直是认为,知识是没有壁垒的,方法是通用的。
比如四人帮的24种设计模式,源自己于建筑模式的灵感,应用于计算机。反之,这几种模式同样也适应于其它行业.
SSO,英文名
Single Sing On 单点登录。这东东为什么会出现,基于以下几种场景:一个公司,有多套系统,由多个机构开发,有各自独立的权限系统。本来很久以来都运行的好好的,一段时间后,由于某个人能力特强,身兼数职,麻烦来了,如果是两三套系统,就有两三套密码,要是更多,不想了,取个折中的方案,全部设一个密码,解决密码问题,那帐号呢,那个可能能随便改,现在为了方便,强行统一了帐号,要一套一套的系统去修改用户帐号,可不是一件简单的事。
既然这么麻烦,有没有一种解决方案呢,归根结底,用户帐号和密码是给谁认----计算机系统,这就容易了,我把各套系统的帐号统一起来,建立一个新的机制(这个就叫SSO-server吧),让用户从一个系统登录以后,就在这个新系统里面登录一个Token,如果他再访问其它系统,那个系统将带着他的Token来请求SSO-server问他,“这个人登录过吗”,得到回答继续处理.
缘起:关注SSO这东东时,正好和朋友一起去逛了下世界最大的私家圆林---圆明圆
事例现场:圆明圆售票管理处征集处理方案,暂定50景点
方案1:每个景点设个卖票点
单景点最小化开销:检票/售票员 一名,检票用具一套,售票用具一套
统计:50人,50套售票用具,50套售票用品
方案2:在公园大门设一售票点,各分景点只设检票员
前题:售单票,和组合票(SSO系统访问可配置)
开销:大门:售票员一名 ,售票用品一套
分景点:检票员一名,检票用品一套
统计:51 人,1套售票用具,50套检票用品
你选那一个
由于这近比较有时间,翻看了几个流行开源框架源代码,模板生成技术他们都有用。
基本使用的有两种 Velocity,Freemarker,两种技术各有千秋,根据这些开源程序要么同时支持,要么都不支持,可以证明他们的客户受众都占有很大的份量,同时也说明了模板技术其实在本质上又是相通的,只不过用了不同的表现手法而已.
个人接触这个技术比较晚,当然用比较新的东东(其实还有一个原因,英文不好,对于开源的东东,主要是图解,Freemarker首页上的一张图道出了模板的实质),就说了Freemarker。
Freemarker 由4部分组成:模板(Template),数据源(实现树形结构的任何数据:xml,javaBean,数据库...),模板处理器(Freemarker API),输出(流)。
通
俗一点说,如果在工厂做过流水线或看过,一看就清楚了,拿一个塑胶玩具厂来说,Template:模具,Java
Objects:原料,处理器:热成型机,Output:玩具.当我们需要不同的玩具,
我们要做的是定制不同的模具,如果我们要做不同颜色的玩具,我们要做的就是更新原料的种类,那么前面的定好了,接下来的就是把原料倒进去,在后面收成品就
可以了
Freemaker写的Bean生成器,主要组成:javabean.ftl,BeanMetaData(原数据定义),PropertyMetaData(属性定义),BeanBuilder构建器用于生成源代码(.java)文件和生成(.class)文件,简易实现了一个由给定字符串生成JavaBean的实现
javaBean.ftl
package ${packageName};
/**
*${comment}
*/
public class ${simpleName?cap_first} implements java.io.Serializable{
private static final long serialVersionUID=${serialVersionUID};
public ${simpleName?cap_first}(){}
<#list fields as field>
<#assign filedType=field.type/>
<#assign filedName=field.name/>
<#assign filedComment=field.comment/>
/**
*${filedComment}
*/
private ${filedType} ${filedName};
/**
* @param ${filedType}
*/
public void set${filedName?cap_first}(${filedType} o)
{
this.${filedName}=o;
}
/**
* @return ${filedType}
*/
public ${filedType} get${filedName?cap_first}()
{
return this.${filedName};
}
</#list>
}
源代码,欢迎交流
源代码:欢迎交流