• SSM前言——相关设计模式


    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:SoftwareInstalledjdk1.7jreinserverjvm.dll

    2)启动类加载器:Bootstrap ClassLoader:D:SoftwareInstalledjdk1.7jrelib t.jar

    3)扩展类加载器:extension ClassLoader:D:SoftwareInstalledjdk1.7jrelibext*.jar

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

    6.适配器模式

    7.模板方法设计模式

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

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

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

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

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

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

  • 相关阅读:
    《人月神话》阅读笔记02
    学习进度条-4
    课堂作业3
    MySql 8.0及对应驱动包匹配注意点
    关于Ubuntu中Could not get lock /var/lib/dpkg/lock解决方案
    STM32之ADC配置,ADC_Mode模式理解
    STM32串口中断的方式发送
    RTC 与RCC 之间的关系
    stm32 MDK5软件仿真之查看io口输出
    STM32 PWM学习
  • 原文地址:https://www.cnblogs.com/lvjygogo/p/8748046.html
Copyright © 2020-2023  润新知