zoukankan      html  css  js  c++  java
  • 设计模式在项目中的应用

    常用设计模式:

    单例模式:

    解决问题:配置类Config的对象只能有一个
    
    解决方案:
    
    Static Config instance
    
    Private Config()
    
    Static Config newInstance(){
    
      If (instance==null){
    
          Instance=new Config()
    
    }
    
     Return instance;
    
    }

    工厂模式:

    解决问题:创建对象用new 耦合度高 new JdkDynamicAopProxy()
    
    解决方案:
    
    1,定义接口 AopProxy
    2,有默认实现类JdkDynamicAopProxy
    3,AopProxy AopProxyFactory.newInstance(){ Return new JdkDynamicAopProxy } 4,创建对象用 aopProxy=AopProxyFactory.newInstance() 以后增加新的实现类,改factory,创建对象的代码不用改。工厂用在框架中,增加新的实现类CgLib,只需要改框架,不影响使用框架的代码。框架增加功能了,用框架的代码不改。 实例源码: org.springframework.aop.framework.AopProxy org.springframework.aop.framework.DefaultAopProxyFactory

    建造者模式:

    解决问题:编程原则:单一职责原则,一个类只做一件事情,controller,service,mapper,vo,config,tools,execption,
    SqlSessionFactory在创建时要解析配置文件,做2件事
    1,在构造方法中解析配置文件
    2,创建sqlsession
    解决方案:增加SqlSessionFactoryBuilder,解析配置文件
    builder=new SqlsessionFactoryBuilder()
    sqlsessionFactory=builder.build()
    
    程序员想要的方式new SqlsessionFactory()

    适配器模式:

    解决问题:接口的抽象方法很多
    解决方案:
    Springmvc 接口handlerInterceptor有三个抽象方法,
    增加HandlerInterceptorAdapter implements Handlerinterceptor{
    三个方法(){空实现}
    }
    
    判断用户是否登录,extends Adapter只需要重写preHandle()
    
    org.springframework.web.servlet.HandlerInterceptor
    org.springframework.web.servlet.handler.HandlerInterceptorAdapter
    
    
    java.awt.event.MouseListener
    java.awt.event.MouseAdapter
    implements 接口,如果抽象方法很多,有3个或5个,框架很有可能写好了adapter.
    应该extends adapter而不是implements 接口

    装饰模式:

    解决问题:一个类功能简单,满足不了我们的需求
    解决方案:单一职责原则,
    例子1:
    Java.io.inputStream.read()
    读出字符串 DataInputStream(inputstream)
    读出对象 ObjectInputStream(inputstream)
    例子2:
    org.apache.ibatis.cache.Cache;chche的子类对PerpetualCache进行封装;

    代理模式:

    解决问题:controller,servlet有很多公用的代码,service,dao有公用的代码,希望公用的代码能自动执行。
    解决方案:让代理去执行公用代码

    观察者模式:

    解决问题:上层界面层,下层数据层,数据层中的数据发生变化,上层应该知道,知道后显示最新数据,上层要观察下层。目标发生变化,观察者要知道。
    解决方案:
    回调callback,多态

    责任链模式:

    解决问题:filter,interceptor,plugin写多个,多个类都要执行
    解决方案:
    1,    接口handlerInterceptor
    2,    多个实现类
    3,    HandlerExecutionChain 
    HandlerInterceptor[]
    for(数组)
    
    实例源码1:
    org.apache.ibatis.plugin.Interceptor
    org.apache.ibatis.plugin.InterceptorChain
    实例源码2:
    org.springframework.web.servlet.HandlerInterceptor
    org.springframework.web.servlet.HandlerExecutionChain
  • 相关阅读:
    python学习笔记--Django入门一 网页显示时间
    python学习笔记--easy_install和pip
    python学习笔记--Django入门0 安装dangjo
    Linux学习笔记总结--memcached配置
    python学习笔记--基础语法
    python学习笔记--导入tab键自动补全功能的配置
    Linux学习笔记总结--ssh认证登录
    ABAP 通过字段找表程序
    smod包含具体的增强(具体实施对象) / CMOD 包含一组smod编写的增强
    SE18 BADI定义 / SE19 BADI 实现
  • 原文地址:https://www.cnblogs.com/yunianzeng/p/12318787.html
Copyright © 2011-2022 走看看