博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SSM前言——相关设计模式
阅读量:6713 次
发布时间:2019-06-25

本文共 2934 字,大约阅读时间需要 9 分钟。

1.使用代理对象,是为了在不修改目标对象的基础上,增强主业务逻辑。客户类真正的想要访问的对象是目标对象,但客户类真正可以访问的对象是代理对象。

2.静态代理是指,代理类在程序运行前就已经定义好,其与目标类的关系在程序运行前就已经确立

3.SomeServiceProxy和SomeServiceImpl都实现ISomeService接口,并且SomeServiceProxy依赖于实现了ISomeService接口的目标类

4.动态代理

JDK的Proxy:

  目标类必须要实现接口

  

final ISomeService target = new SomeServiceImpl();        ISomeService proxy = (ISomeService) Proxy.newProxyInstance(target                .getClass().getClassLoader(), // 目标类的类加载器                target.getClass().getInterfaces(), // 目标类所实现的所有接口                new InvocationHandler() { // 匿名内部类                    // proxy:代理对象                    // method:目标方法                    // args:目标方法的参数列表                    @Override                    public Object invoke(Object proxy, Method method,                            Object[] args) throws Throwable {                        // TODO Auto-generated method stub                        Object result = method.invoke(target, args);                        if(result!=null)                            result = ((String) result).toUpperCase();                        return result;                    }                });        String result = proxy.doFirst();

CGLIB动态代理:

  通过继承实现功能增强,要求目标类能被继承

  采用方法回调设计模式:就是类A调用类B中的某个方法b,然后类B又再某个时候反过来调用类A中的某个方法a,对于A来说,这个a方法便叫做回调方法  

  

package com.travelsky.cglib;import java.lang.reflect.Method;import net.sf.cglib.proxy.Enhancer;import net.sf.cglib.proxy.MethodInterceptor;import net.sf.cglib.proxy.MethodProxy;public class MyCglibFactory implements MethodInterceptor{    private SomeService target;        public MyCglibFactory() {        super();        // TODO Auto-generated constructor stub        target=new SomeService();    }    public SomeService myCglibCreator(){        //创建增强器对象        Enhancer enhancer = new Enhancer();        //指定目标类,即父类        enhancer.setSuperclass(SomeService.class);        //设置回调接口对象        enhancer.setCallback(this);        return (SomeService) enhancer.create();    }    //回调方法    @Override    public Object intercept(Object obj, Method method, Object[] args,            MethodProxy proxy) throws Throwable {        // TODO Auto-generated method stub        Object result = method.invoke(target, args);        if(result!=null){            result = ((String)result).toUpperCase();        }        return result;    }}

5.java命令启动java虚拟机:

1)启动虚拟机:D:\SoftwareInstalled\jdk1.7\jre\bin\server\jvm.dll

2)启动类加载器:Bootstrap ClassLoader:D:\SoftwareInstalled\jdk1.7\jre\lib\rt.jar

3)扩展类加载器:extension ClassLoader:D:\SoftwareInstalled\jdk1.7\jre\lib\ext\*.jar

4)应用程序类加载器:Application ClassLoader:负责加载用户类路径(ClassPath)上所指定的类库。

6.适配器模式

7.模板方法设计模式

在模板方法设计模式中,存在一个父类。其中包含两类方法:模板方法与步骤方法。

模板方法,即实现某种算法的方法步骤和框架,都是通过调用步骤方法完成的。

步骤方法,即完成模板方法的每个阶段性的方法。每个步骤方法完成某一特定的、完成总算法的一部分功能。步骤方法有三种类型:抽象方法、最终方法、与钩子方法

抽象方法是要求子类必须实现的方法,是完成模板方法的算法步骤中必须由子类完成的个性化定义。

最终方法是子类不能重写的方法,是若要完成模板方法的算法步骤,对于所有子类执行都一样的步骤。(用final修饰)

钩子方法是父类给出了默认实现,但子类也可以重写的方法。

 

转载于:https://www.cnblogs.com/lvjygogo/p/8748046.html

你可能感兴趣的文章
java21:捕鱼达人
查看>>
Zabbix 服务端搭建
查看>>
Java - 一个单例
查看>>
学习JAVA 持续更新
查看>>
Spring propertyConfigurer类
查看>>
Linux系统分析工具之uptime,top(一)
查看>>
EIGRP之DUAL(扩散更新算法)
查看>>
cacti自定义数据收集脚本,创建Data Templates和Graph Templates
查看>>
对你同样重要的非技术贴,一封有效的求职信的具体写法
查看>>
在路由器里插入和删除ACL
查看>>
我的友情链接
查看>>
OpenStack从入门到放弃
查看>>
戴尔和EMC已经成为正式的竞争对手
查看>>
6425C-Lab12 管理DC(1)
查看>>
RocketMQ调研笔记
查看>>
maven 注册 jar
查看>>
高并发写入mysql的设计
查看>>
成长点滴:我不知道该说些什么?
查看>>
linux之使用man查看命令手册
查看>>
IT管理员如何保证你的内网安全?
查看>>