1,使用框架技术的优势:
1)不用考虑公共问题,框架已经为我们做好了
2)可以专心在业务逻辑上,保证核心业务逻辑的开发质量
3)结构统一,便于学习,维护
4)最重要的一点:框架中集成了前人的经验,可以帮助新手写出稳健。性能优良而且结构优美的高质量程序;
2,什么是框架:
框架(Framework)是一个提供了可重用的公共结构的半成品。一方面提供了可以拿来就用的工具,也提供了可重用的设计;
框架使混乱的东西变得结构化;
框架是一组协同工作的组件;
3,java中的主流框架:
1)Struts框架;是MVC设计模式的体现。Struts定义了通用的Controller(控制器),通过配置文件(一般是struts.config.xml)隔离了Model(模型)和View(视图),以Action的概念对用户请求做了封装,使代码更清晰易读。Struts还提供了自动将请求的数据填充到对象中及页面标签等简化编码的工具。
2)Struts2以webwork为内核,吸收了struts框架的核心,提供了更加简洁的MVC设计模式实现的web应用程序框架。它引入了几个新的框架特性:从逻辑中分离出横切关注点的拦截器,减少或消除配置文件,贯穿整个框架的强大表达式语言,支持可变更和可重用的基于MVC模式的标签API,Struts2充分利用了从其他MVC框架学到的经验和教训,是框架更加清晰,灵活;
Struts的优点;
1)最大的优点:开源;
2)实现了MVC模式,并有丰富的tag标签可用;
3)通过一个配置文件,即可把握整个系统各部分之间的联系,并提供Exception处理机制,数据库连接池还支持I18N
4)Struts框架使开发者在构建基于Java Servlet和JSP技术的web应用时更加容易,并且提供了一个统一的标准框架;
缺点:
1)Struts的Action必须是线程安全的,它仅仅允许一个实例去处理所有的请求。所以Action用到的所有资源都必须统一同步,这就引起了线程安全问题;
2)Struts适用范围有限,它是基于web的MVC解决方案,所以 必须用到HTML,JSP和Servlet来实现它;
Hidbernate框架:
java是面向对象的,而主流的数据库是面向关系的数据库表,Hibernate框架就是处理对象和数据库表之间的转换的问题的;
3)Hibernate是开源持久化的框架,负责简化将对象数据保存到数据库中或从数据库中读取数据并封装到对象的工作。通过简单配置和编码即可替代JDBC繁琐的程序代码。
使程序员使用面向对象的编程思维来操作数据库;
Hibernate可以应用到C/S或B/S结构中,Struts只能用在B/S程序;
4)Spring框架,是轻量级的框架,渗透了JavaEE 技术的各方面,它主要作为依赖注入容器和AOP,还提供了声明式事物,对DAO层的支持等简化开发的功能。Spring还可以和Struts,Struts2,Hibernate等技术集成;构成了比较流行的SSH架构;
Spring优点:
1)低侵入式设计,代码污染极低;
2)独立于各种应用服务器,可以真正实现 Write Once,Run Anywhere(一次编写到处运行)
3)Spring的DI机制(依赖注入)降低了业务对象替换的复杂性;
4)Spring开发并不完全依赖于Spring所有组件,开发者可以自由选择使用Spring框架的部分或全部组件;
SSH架构就是使用Spring部分组件,然后与Struts和Hibernate进行整合;
此外还有DWR框架(Ajax框架),jQuery框架等;
设计模式:是由四人帮设计的23种设计模式 ;
想让程序具有某种特性,就借鉴某种模式即可;
模式:问题及解决方案共同的本质;
设计模式:是一套被反复使用,多数人知晓的,经过分类编目的,代码设计经验的总结;
框架和设计模式的区别:
1)构件是代码重用,设计模式是设计重用,框架介于两者之间,是部分代码重用部分设计重用;
2)设计模式比框架更抽象:框架可以用代码来表示,模式只有实例可以用代码来表示;
3)设计模式是比框架更小的元素,一个框架可以包含多个设计模式;
4)框架针对某个特定的应用领域,解决某个问题,相当于一个软件;同一个设计模式则适用于不同的应用;
模式包含的要素:
名字(可以有多个名字,但主要的名字应该只有一个,其他的应是别名),问题(描述了在何时使用模式),效果,解答(解决方案);
MVC:模型-视图-控制器模式;是架构模式,不是设计模式;它是在合成模式,策略模式和观察者模式的基础上加一些别的东西组成的;
架构模式:一个架构模式描述软件系统里的基本的结构组织或纲要。架构模式提供一些先定义好的子系统,指定他们的责任,并给出把他们组织在一起的法则和指南;
设计模式:一个设计模式提供一种提炼子系统或软件系统中的组件或他们之间的关系的纲要设计。它描述普遍存在的在相互通讯的组件中重复出现的结构,这种结构解决在一定的背景中具有一般性的设计问题;
Model层:实现系统中业务逻辑,可用JavaBean或EJB来实现;
Controller层:Controller是位于model和view之间沟通的桥梁,使用servlet技术实现;
View层:用于与用户交互,使用JSP实现;
Spring中涉及到的设计模式:
创建型模式:工厂模式是创建型模式的代表之一;
工厂模式;单例模式;模板方法模式;代理模式;策略模式;
1)简单工厂模式:
简单工厂模式不属于23种标准设计模式;是工厂方法模式的一个特殊实现;
简单工厂模式是由一个工厂类根据传入的参数决定创建出哪一种产品类的实例;
简单工厂模式就是由一个工厂类来创建出所有的产品类的实例;
缺点:如果产品过多,要新增一个产品时,就要对代码进行改写,不符合开闭原则;从而引入了工厂方法模式;
抽象工厂模式:是为创建一组相关或依赖的对象提供创建接口;
工厂模式:是为一类对象提供创建接口或延迟对象的创建到子类中实现;
2)结构型模式:
2)代理模式(Proxy)是结构型模式的代表;处理对象间关系的模式;通过代理对象去解决真实对象的问题;(中介)
对于结构模型,它是用来处理对象该如何组织及采用什么样的结构更加合理的问题;
代理模式的使用条件:
当对已有的方法进行使用时,需要对原有方法进行改进或修改,此时又两种改进选择:
1)修改原有方法来适应现在的使用方式;
2)使用一个’第三者‘方法来调用原有方法,并对方法产生的结果进行一定的控制;
第一种方法违背了“对扩展开放,对修改关闭”的开闭原则,第二种方法却可以将功能划分的更清晰,有助于后面的维护,第二种就是代理模式,这就是它的适用条件;
3)行为型模式:规定了各个对象应该具备的职责及对象间的通信方式;规定了对象的调用方式和数据传递方式;
策略模式(Strategy):是典型的行为型设计模式;
适用条件:适合于算法经常变换的情况,例如定义一系列的算法,并分别封装起来,让它们之间相互替换,算法的变化不会影响到使用算法的客户,算法可以独立于使用它的客户而变化;
适用于Bean对象的创建,及代理对象的创建;
4)单例模式:
单例模式确保某一个类只有一个 实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类;
特点:
1)单例类只有一个实例;
2)必须自己创建自己这唯一的实例;
3)单例类必须给所有其他对象提供这一实例;
适用条件:某个系统要求一个类只有一个实例时才使用单例模式。
5)模板方法模式:
准备一个抽象类,将部分逻辑以具体方法以及具体构造子类的形式实现,然后声明一些抽象方法来使子类实现剩余逻辑。不同子类可以以不同的方式来实现这些抽象方法,从而对剩余的逻辑有不同的实现;
就是先定义一个模板,在逻辑的的细节由子类实现;
优点:
1)将代码的公共行为提取出来,达到复用的目的;
2)父类的模板方法控制子类的具体实现;
适用条件:一次性实现一个算法的不变的部分,并将可变的部分留给子类来实现;
各个子类中公共的行为应该提取出来,并集中到一个公共父类中,避免代码重复;
除了以上框架中需要使用的模式外,还有其他常用设计模式:
6)适配器模式:Adapter,类似变压器的使用,又称变压器模式;
即把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配的而无法在一起工作的两个类能够在一起工作;
适配器模式分为类的适配器模式和对象的适配器模式两种不同的形式;
区别:类的适配器模式就是使用继承关系将适配的类的API转换成目标类的API,而对象的适配器模式不是使用继承关系,而是使用了委托关系;
7)命令模式:
命令模式属于对象的行为模式,又称为行动模式(Action)或交易模式(Transaction)。命令模式把一个请求或操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或记录请求日志,可以提供命令的撤销和恢复功能;
命令模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分隔开,委派给不同的对象,每个命令的都是一个操作;
优点:
1)命令模式使新的命令很容易地被加入到系统里
2)允许接收请求的一方决定是否要否决请求;
3)能较容易设计一个命令队列;
4)可以容易的实现对请求的undo和redo
5)在需要的情况下,可以较容易的将命令记入日志;
8)观察者模式:(Observer)
是对象的行为模式,又叫做发布-订阅模式(publish-subscribe),模型-视图模式(Model/View),源-监听器模式(Source/Listener)或从属者模式(Dependents).观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使他们能自动更新自己。
使用设计模式可以:
1)确定并不明显的抽象和描述这些抽象的对象;
2)决定一个对象应该是什么
3)定义对象的操作
4)描述对象的实现
5)最大程度的复用
选择设计模式的步骤:
1)理解问题需求:需求是模式选择的基础,通过对需求的分析可以找到多个模式,形成模式组;
2)研究组内模式:需求分析得出的组内模式有一些共性,但是每种模式都有其特殊的意图,使用动机和使用条件,因此需要对组内模式进行研究
3)考虑设计模式如何解决设计问题:在此过程中,主要考虑设计模式在设计中所支持的可变化因素,即确定改变什么而不需要重新设计,根据这一点可以找到所需要的设计模式。此外考虑与其相关的设计模式;