java设计模式
一直不是很了解设计模式,也不知道如何使用。现在慢慢一点一点了解。
策略模式:不同行为,相同接口,环境决定使用那种行为
策略模式:男生追女生,结果是一样的,大部分都追到了,但是追的策略不一样,怎么样才能追到女生呢?那就要有好的策略。
原型模式:克隆,相同数据,不同对象
孙悟空有个特殊的技能,就是拔跟猴毛就可以变出一个孙悟空,这个孙悟空和真的孙悟空是长的一模一样,但是他们是不同的对象。
应用场景:主要是用来拷贝复杂的数据结构对象的数据
职责链模式
使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系,
将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止。
角色
抽象处理者角色(Handler):定义出一个处理请求的接口。如果需要,接口可以定义 出一个方法以设定和返回对下家的引用。这个角色通常由一个Java抽象类或者Java接口实现。
具体处理者角色(ConcreteHandler):具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。由于具体处理者持有对下家的引用,因此,如果需要,具体处理者可以访问下家。
应用实例:过滤器链和拦截器链。
模板模式
对固定流程中的变化部分做出抽象,不同的子类按不同的方式实现变化的部分。
抽象类中可以有共同的方法:所有子类都会用到的部分。
不同的方法:
1:抽象方法:父类为抽象方法,子类必须实现。
2、勾子方法:父类为空方法,子类可实现,可不实现。
spring中使用场景:
1、TransactionTemplate:事务管理模板
2、jdbcTemplate:数据库操作模板
3、AbstractApplicationContext类中的refresh方法。
如固定流程
package template; //冲饮料(拿出去卖钱了) public abstract class Bevegrage { //不能被重写 public final void create(){ //1、把水烧开 boilWater(); //2、把杯子准备好、原材料放到杯中 pourInCup(); //3、用水冲泡 brew(); //4、添加辅料 addCoundiments(); } public abstract void pourInCup(); public abstract void addCoundiments(); public void brew(){ System.out.println("将开水放入杯中进行冲泡"); }; public void boilWater(){ System.out.println("烧开水,烧到100度可以起锅了"); } }
不同的实现类实现pourInCup和addCoundiments方法。
观察者模式:
javaJDK有内置的观察者模式接口.1、Observer接口 观察者接口 2、Obserable 被观察对象接口
观察者模式的应用场景: <1>.对一个对象状态的更新需要其他对象同步更新;,或者一个对象的更新需要依赖另一个对象的更新;<2>.对象仅需要将自己的更新通知给其他对象而不需要知道其他对象的细节,如消息推送。
实际应用案例:
1、观察者模式还可以用于网络中的客户端和服务器,比如手机中的各种App的消息推送,服务端是观察者,各个手机App是被观察者,一旦服务器上的数据(如App升级信息)有更新,就会被推送到手机客户端。
2、JAVA AWT的源监听器模式。
3、spring中的应用
事件机制的实现需要三个部分,事件源,事件,事件监听器,在上面介绍的ApplicationEvent就相当于事件,ApplicationListener相当于事件监听器,这里的事件源说的就是applicaitonContext.
ApplicationContext是spring中的全局容器,翻译过来是"应用上下文"的意思,它用来负责读取bean的配置文档,管理bean的加载,维护bean之间的依赖关系,可以说是负责bean的整个生命周期,再通俗一点就是我们平时所说的IOC容器.
Application作为一个事件源,需要显示的调用publishEvent方法,传入一个ApplicationEvent的实现类对象作为参数,每当ApplicationContext发布ApplicationEvent时,所有的ApplicationListener就会被自动的触发.
类图: