当前位置:  编程技术>软件工程/软件设计
本页文章导读:
    ▪设计模式应用与发展之工厂模式 java篇      1     引子 这是一个幸福的时代,特别是作为一个java程序员(感慨一下而已,这并不意味着我所讲的内容仅适用于java)。 基于我个人的一贯风格,我不准备采用大量技.........
    ▪Apache shiro学习笔记+ spring整合shiro (一)       Apache Shiro官网:http://shiro.apache.org/ 概念: shiro是一个强大灵活的开源安全框架,可以干净利落的处理认证、授权、企业会话管理和加密。 shiro的首要目标是简单和易于理解。安全有时候是.........
    ▪JSF --J2EE 表示层技术       JavaServer Faces (JSF) 是一种用于构建 Web 应用程序的新标准 Java 框架。它提供了一种以组件为中心来开发 Java Web 用户界面的方法,从而简化了开发。JavaServer Faces 还引起了广大 Java/Web 开发人员的.........

[1]设计模式应用与发展之工厂模式 java篇
    来源: 互联网  发布时间: 2013-11-19
1     引子

这是一个幸福的时代,特别是作为一个java程序员(感慨一下而已,这并不意味着我所讲的内容仅适用于java)。

基于我个人的一贯风格,我不准备采用大量技术术语和官腔讲述这次的主题:工厂模式应用与发展。今时今日提到工厂模式,相信绝大部分的人都已经对这个词汇有所了解(恩恩,注意我的用词,我没说“对他的概念、含义和用途有所了解”)。

那么,在开始进入正题之前,我们先回顾一下工厂模式的作用(我不准备列举在这,自己想想)。

OK,下面开始我的讲述,请大家耐心点(是的,我怕有人半途而废;噢,再啰嗦一下,重点在示例代码)!

2     石器时代 2.1   痛苦的开始

据说原始人类所使用的工具的产生有很大的随机性。例如这样的情况:最开始大家吃肉肉,一窝蜂扑上去撕咬;后来可能觉得不卫生(也可能是觉得咬起来牙齿疼,也可能是觉得自己每次都咬不过别人),于是按自己牙齿的模样,找些放大比例的动物牙齿(或者石头),尝试着割肉,发现挺好使的,于是工具产生了。

代码界同样有这样的事情发生(产品的童鞋要我们为每个名人设计一句话):

...

if(name == "bill gates") {

       out.println("Doyou like Win8?");

} else if(name == "Stevejobs") {

       out.println("sonice iPhone.");

} else if(name =="Zuckerberg") {

       out.println("Welcometo facebook.");

} else {

...

看上去这样没有什么不妥,是不是?

然而,事情远远没有这么简单。

“花心”的产品童鞋总会给我们提点新要求,有木有?他们很可能觉得每个名人都应该充分体现自己的个性,要求为他们增加肢体语言什么的。有木有?

好吧,我们的痛苦从此开始了……

2.2   梦想

我猜想,原始人类估计不像我们现在这么贪婪,他们在寻找牙齿与石头的时候,很可能是在想:老天爷,赐我一把割肉神器吧(而不是:老天爷,赐我一具不用吃饭的肉体吧)!当然,在得到神器的那一天来临之前,我们的原始先祖们,还是不得不继续寻找更锋利的牙齿与石头。

是的,代码界也发生了一些变化:

...

public void billgatesShowtime() {

       out.println("Doyou like Win8?");

       out.println("Andput up his hands.");

}

...

if(name == "bill gates") {

       billgatesShowtime();

} else if(name == "Stevejobs") {

       stevejobsShowtime();

} else if(name =="Zuckerberg") {

       zuckerbergShowtime();

} else {

...

噢,看上去确实好多了,我们可以让老比尔给大家举手示意了,不是吗?

是的,你兴奋了很久,甚至晚上睡觉都带着醉人的笑容。

顺便还做了个梦:你站在云端,觉得孤独,便心血来潮的说:要有比尔,于是比尔出现了;你又说:要有乔布斯,于是乔布斯出现了;你接着说:要有马化腾……

3     青铜器时代

在这之前,大概还有一个短暂的后石器时代,在这个阶段里有一种做法,那就是直接在if语句里,写上newXxx(),然后调用Xxx类的特定方法。但我们认为这不具备代表性,所以,让我们大家一起忽视他吧。

3.1   痛苦的持续

哦,时光悠悠,石器时代过去了。

我们的先祖仍在期待神器,仍在寻找更锋利的割肉工具……

代码界,你跌坐在屏幕前,嘴里念念有词:果然应验了,我TM说“要有马化腾”干毛啊?

是的,可恶的产品童鞋说了,要把马化腾加入这个名人行列,同时还要抱一只企鹅。

在一万只草泥马奔腾过后,你从泥泞的草原上站起来,向着太阳的方向,前进前进前进进……

3.2   曙光

好在先祖们发现了青铜,相比之下,青铜比石头和牙齿更靠谱,还能自己决定着割肉工具的外形(嚯嚯,越拉风越好哇)。

代码界里,你也在进步(java程序员嘛,幸福哇):

...

interface People {

       publicvoid showtime();

};

...

class Xiaomage implements People {

       publicvoid showtime() {

              out.println("Fuck360.");

              out.println("Doyou like QQ pets?");

       }

};

...

class FamousPersons {

       privateMap<String, People> peoples = new HashMap<String, People>();

 

       publicFamousPersons() {

              peoples.put("billgates", new Billgates());

              peoples.put("stevejobs", new Stevejobs());

              peoples.put("马化腾", new Xiaomage());

              …

       }

 

       publicPeople find(String name) {

              returnpeoples.get(name);

       }

};

...

FamousPersons famousPersons = newFamousPersons();

People people =famousPersons.find(name);

 

if(people != null) {

       people.showtime();

}

...

咦?代码好像变多了,但我们为你自豪;因为到此时,你已经真正实现了工厂模式。

是的,不管是基于OO思想,还是逻辑结构上,代码都有了很大进步;你再也不同担心产品给你增加名人,不用担心名人的各种性格和癖好。

于是你睡了个好觉,但你诚惶诚恐,不敢做梦。

4     铁器时代 4.1   愤怒的燃烧

青铜的冶炼和锻造技术已经达到了巅峰。吴钩、鱼肠、干将、莫邪……,喔噢,这已经是割肉神器了不?

仿佛从现在开始,担心先祖的生活已经有点多余了。

是的,因为代码界里,名人的数量已经达到了10000+(名人的各种性格和癖好,也让你震惊到了无以复加)。

你已无数次的被这份名单中人从梦中惊醒,你的生活开始变得枯燥,你的世界渐渐黑白。仿佛你的生活就是为了这份名单而存在(有的名人改名了;有的名人换公司了;有的名人变性了,擦啊啊啊……)。

FamousPersons已经被神兽草泥马践踏了无数次,而且变成了工程里面个头最大的源代码文件;每次你从peoples里找名人的时候,这份超长的名单几乎亮瞎了你的钛合金眼。

一次次的代码更新,SVN上的代码号直接蹦到了5位数;当你部署代码时,看着运维冒着幽光的怨恨眼神,你叔忍了,但你婶认为绝不能忍;于是你发粪图墙……

4.2   福音

有一天,某位先祖发现自己的神器青铜大剑居然被一柄小匕首斩断了,擦啊,这是什么玩意?超神器?

呵呵,猪脚模式开启了,在代码界,你也发现了“神器”。

你先把这个名单弄到了数据库里(表名famous_persons):

然后,你用这把“神器”大刀阔斧把臃肿的FamousPersons剁的稀烂。

再然后,你重造了一个轮子:

...

class FamousPersons {

       privateConnection conn = null;

...

       privateString findClass(String name) {

              StringclassName = null;

              Statementstmt = conn.createStatement();

              ResultSetresult = stmt.executeQuery("SELECT * FROM famous_persons WHERE Name="+ name);

 

              if(result.next()){

       

    
[2]Apache shiro学习笔记+ spring整合shiro (一)
    来源: 互联网  发布时间: 2013-11-19


Apache Shiro官网:http://shiro.apache.org/

概念:

shiro是一个强大灵活的开源安全框架,可以干净利落的处理认证、授权、企业会话管理和加密。

shiro的首要目标是简单和易于理解。安全有时候是非常复杂令人头疼的问题,shiro隐藏了复杂

的细节,暴露了简介直观的API来简化开发者使他们的应用程序更安全的努力。

 

功能:进行用户认证、执行访问控制、单点登录、Remember Me服务

 

安全的一些概念:身份认证、授权、会话管理、加密被认为是构成应用安全的基础要素。

身份认证,就是验证用户身份,典型的“登录”过程就是身份认证的过程。

授权:也就是访问控制(ac),也即某用户可以可以使用应用的哪些功能?

会议管理:管理用户特定的会话,即使在非Web或EJB应用。

加密:保持数据的安全使用的加密算法,同时仍然易于使用。

对于Session,在WEB应用中它基于HttpSession,而一般应用中默认使用企业会话管理。shiro的Session

用起来和HttpSession差不多,并且使用它不需要Http环境。

 

在最高的层次上讲,shiro主要有三个主要的概念,它们分别是Subject、SecurityManager和Realms。

 

1、shiro使用Subject这一概念来描述当前用户,‘User’这个词通常隐含的指一个人,但是Subject可以是一个

人也可以代表第三方服务,守护账户,定时作业,或者其他类似的与软件交互的事物。

 

2、所有Subject实例都与一个SecurityManager绑定,当你和一个Subject交互时,所有交互都会通过SecurityManager

转换为特定Subject的交互。

SecurityManager是shiro架构的核心,它扮演‘保护伞’对象的角色,与其他内部安全组件一起构成对象图的核心。 

SecurityManager及其内贸部对象图一旦被应用配置,它基本上就被放在一边不再被程序员使用了,

开发人员基本上总是在与Subject的相关API打交道。它在幕后支持Subject的安全操作。

 

3、Realms在shiro与你的应用程序的安全数据之间充当着桥梁或者说是连接器的作用。

从这种意义上讲,Reaml就是一个特定的安全DAO,它为shiro提供所需的数据。

在配置shiro时,你必须为认证、授权指定至少一个可用的Realm。

 

shiro提供了现成的Realm连接到LDAP、关系数据库(JDBC)、ini和properties文件等。

用户可以使用自己的Realm



Shiro 是一个用 Java 语言实现的框架,通过一个简单易用的 API 提供身份验证和授权。使用 Shiro,您就能够为您的应用程序提供安全性而又无需从头编写所有代码。


Shiro 的 Session 对象允许无需 HttpSession

    
[3]JSF --J2EE 表示层技术
    来源: 互联网  发布时间: 2013-11-19

JavaServer Faces (JSF) 是一种用于构建 Web 应用程序的新标准 Java 框架。它提供了一种以组件为中心来开发 Java Web 用户界面的方法,从而简化了开发。JavaServer Faces 还引起了广大 Java/Web 开发人员的兴趣。“企业开发人员”和 Web 设计人员将发现 JSF 开发可以简单到只需将用户界面 (UI) 组件拖放到页面上,而“系统开发人员”将发现丰富而强健的 JSF API 为他们提供了无与伦比的功能和编程灵活性。JSF 还通过将良好构建的模型-视图-控制器 (MVC) 设计模式集成到它的体系结构中,确保了应用程序具有更高的可维护性。最后,由于 JSF 是通过 Java Community Process (JCP) 开发的一种 Java 标准,因此开发工具供应商完全能够为 JavaServer Faces 提供易于使用的、高效的可视化开发环境。


本文讲述的内容是JSF。首先给不熟悉的读者们进行一下简单的JSF入门介绍:JSF是java web 的标准,可能会取代jsp 时代。JSF直译过来就是Java Web应用的用户界面框架。

JSF提供一套API以及标签库,用来创建页面表单以及复杂的界面元素

JSF使得编写表单提交的代码更加简单,这些代码可以响应那些不同的按钮提交,改变某些值或某些用户的选择等等

◆Managed beans:使得JSF简化了处理请求参数的方法

◆EL(Expression Language):JSF有一套表达式语言用来访问java bean的属性以及集合元素等。

◆提供表单域类型转换以及验证

◆特有属性

◆UI组件模型

JSF提供一套丰富灵活的组件模型,包括:

◆一套UIComponent类,定义UI组件的状态和行为。

◆呈现模型:定义如何用不同的方式来呈现组件

◆事件和监听器模型用来处理组件的事件。

◆转换模型:进行数据转换

◆验证模型:如何验证数据的合法性

JSF入门:数据转换模型

当一个组件绑定到一个对象上之后,对于组件数据来说,总共有两个视图:

一个是模型视图:从这个角度去看,数据表现为java对象的类型,如int ,long,Date等等

一个是呈现视图:从这个角度去看,数据表现为一种可以被人读取或修改的形式。比如一个Date类型,可能被展现为一个yyyy-MM-dd格式的字符串,或者是三个字符串,分别代表年、月、日。

可以定义自己的转换器来转换数据。

JSF入门:事件与监听器模型

事件:值改变事件、动作事件、数据模型事件。

值改变:比如输入框的值被更改、选中了checkbox等

动作事件:点击按钮或超链接

数据模型事件:UIData组件的一行被选中的时候触发这个事件。

JSF入门:导航模型

Navigation-rule,可以包含一个from-view-id和多个navigation-case

每个navigation-case中,主要包括转向的页面。

From-view-id : 当前页面

From-action:从哪个action方法

From-outcome:从哪个逻辑名称

To-view-id:转向哪个页面

导航解决的问题是:从哪里到哪里。一句话来说就是:从from-view-id页面,当from-action方法被调用而且其返回值是from-outcome的时候,转向to-view-id页面。

【编辑推荐】

  • JSF请求处理过程详解
  • 使用Acegi保护JSF应用程序
  • JSF的技术与组件
  • JSF开发问题和解决
  • 浅析对JSF项目的单元测试

  • 作者:moubenmao 发表于2013-5-2 11:33:56 原文链接
    阅读:73 评论:0 查看评论

        
    最新技术文章:
    ▪主-主数据库系统架构    ▪java.lang.UnsupportedClassVersionError: Bad version number i...    ▪eclipse项目出现红色叉叉解决方案
    ▪Play!framework 项目部署到Tomcat    ▪dedecms如何做中英文网站?    ▪Spring Batch Framework– introduction chapter(上)
    ▪第三章 AOP 基于@AspectJ的AOP    ▪基于插件的服务集成方式    ▪Online Coding开发模式 (通过在线配置实现一个表...
    ▪观察者模式(Observer)    ▪工厂模式 - 程序实现(java)    ▪几种web并行化编程实现
    ▪机器学习理论与实战(二)决策树    ▪Hibernate(四)——全面解析一对多关联映射    ▪我所理解的设计模式(C++实现)——解释器模...
    ▪利用规则引擎打造轻量级的面向服务编程模式...    ▪google blink的设计计划: Out-of-Progress iframes    ▪FS SIP呼叫的消息线程和状态机线程
    ▪XML FREESWITCH APPLICATION 实现    ▪Drupal 实战    ▪Blink: Chromium的新渲染引擎
    ▪(十四)桥接模式详解(都市异能版)    ▪你不知道的Eclipse用法:使用Allocation tracker跟...    ▪Linux内核-进程
    ▪你不知道的Eclipse用法:使用Metrics 测量复杂度    ▪IT行业为什么没有进度    ▪Exchange Server 2010/2013三种不同的故障转移
    ▪第二章 IoC Spring自动扫描和管理Bean    ▪CMMI简介    ▪目标检测(Object Detection)原理与实现(六)
    ▪值班总结(1)——探讨sql语句的执行机制    ▪第二章 IoC Annotation注入    ▪CentOS 6.4下安装Vagrant
    ▪Java NIO框架Netty1简单发送接受    ▪漫画研发之八:会吃的孩子有奶吃    ▪比较ASP和ASP.NET
    ▪SPRING中的CONTEXTLOADERLISTENER    ▪在Nginx下对网站进行密码保护    ▪Hibernate从入门到精通(五)一对一单向关联映...
    ▪.NET领域驱动设计—初尝(三:穿过迷雾走向光...    ▪linux下的块设备驱动(一)    ▪Modem项目工作总结
    ▪工作流--JBPM简介及开发环境搭建    ▪工作流--JBPM核心服务及表结构    ▪Eclipse:使用JDepend 进行依赖项检查
    ▪windows下用putty上传文件到远程Linux方法    ▪iBatis和Hibernate的5点区别    ▪基于学习的Indexing算法
    ▪设计模式11---设计模式之中介者模式(Mediator...    ▪带你走进EJB--JMS编程模型    ▪从抽象谈起(二):观察者模式与回调
    ▪设计模式09---设计模式之生成器模式(Builder)也...    ▪svn_resin_持续优化中    ▪Bitmap recycle方法与制作Bitmap的内存缓存
    ▪Hibernate从入门到精通(四)基本映射    ▪设计模式10---设计模式之原型模式(Prototype)    ▪Dreamer 3.0 支持json、xml、文件上传
    ▪Eclipse:使用PMD预先检测错误    ▪Jspx.net Framework 5.1 发布    ▪从抽象谈起(一):工厂模式与策略模式
    ▪Eclipse:使用CheckStyle实施编码标准    ▪【论文阅读】《Chain Replication for Supporting High T...    ▪Struts2 Path_路径问题
    ▪spring 配置文件详解    ▪Struts2第一个工程helloStruts极其基本配置    ▪Python学习入门基础教程(learning Python)--2 Python简...
    ▪maven springmvc环境配置    ▪基于SCRUM的金融软件开发项目    ▪software quality assurance 常见问题收录
    ▪Redis集群明细文档    ▪Dreamer 框架 比Struts2 更加灵活    ▪Maven POM入门
    ▪git 分支篇-----不断更新中    ▪Oracle非主键自增长    ▪php设计模式——UML类图
    ▪Matlab,Visio等生成的图片的字体嵌入问题解决...    ▪用Darwin和live555实现的直播框架    ▪学习ORM框架—hibernate(二):由hibernate接口谈...
    ▪(十)装饰器模式详解(与IO不解的情缘)    ▪无锁编程:最简单例子    ▪【虚拟化实战】网络设计之四Teaming
    ▪OSGi:生命周期层    ▪Javascript/Jquery——简单定时器    ▪java代码 发送GET、POST请求
    ▪Entity Framework底层操作封装(3)    ▪HttpClient 发送GET、POST请求    ▪使用spring框架,应用启动时,加载数据
    ▪Linux下Apache网站目录读写权限的设置    ▪单键模式的C++描述    ▪学习ORM框架—hibernate(一):初识hibernate
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3