onlyliuxin / coding2017

218 stars 643 forks source link

spring中隐藏了那些设计模式? #523

Open linlazy opened 7 years ago

linlazy commented 7 years ago

目前只知道AOP代理,IOC工厂,Bean单例模式

guoshenghui commented 7 years ago

spring MVC有用到门面模式,责任链模式

sulei0205 commented 7 years ago

讲道理,以我自己的知识了解,我大概只能指出单例模式,工厂模式,动态代理。但是我去查看了一些资料发现很多一些我们忽略的但是确很精妙的其他模式。 例如:适配器模式:(昨天在课上讲过适配器模式,我记得我提了一下Springmvc里面的适配器模式,是为了适配多种控制器),而spring里面的适配器模式运用在AOP的处理当中,大意就是将里面的各种advisor中的Advice适配成需要的MethodInterceptor对象。 包装器模式:在Spring中对应的类名中包含Wrapper和Decorator这些单词的,他主要就是动态的给一个对象添加额外的职责。 观察者模式:我们一开始的监听Listener,例如ApplicationLister。用途就是:在一个对象的状态发生改变之后,对于依赖他的对象会被通知且更新。 策略模式:查了一下,大概都是对应的将一系列算法封装起来让他们可以灵活地相互替换,使得这些算法可以独立于使用者而变化,Spring在实例化对象时用到了。 模板方法:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的(百度摘抄),Spring中的JdbcTemplate使用。 建设者模式:在org.springframework.beans.factory.support.BeanDefinitionBuilder类中,这属于一个我们通过编程方式定义的bean类,它们为AbstractBeanDefinition抽象类的相关实现设置值,比如作用域,工厂方法,属性等。举例子:这个类里面有这些方法:setParentName(String parentName),setFactoryMethod(String factoryMethod),addConstructorArg(Object value),看到这些估计你已经想到了设计模式第一个刘老师对于builder模式举的那个例子。 解释器模式:这个模式我没看的太懂,就直接摘抄了,在现实世界中,我们人类需要解释手势。他们可以对文化有不同的含义。这是我们的解释,给他们一个意义。在编程中,我们还需要分析一件事情,并决定它是什么意思。我们可以用解释设计模式来做,此模式基于表达式和评估器部分。第一个代表一个要分析的事情。这个分析是由评价者来做出的,它们知道构成表达的人物的意义。不必要的操作是在一个上下文中进行的。Spring主要以Spring Expression Language(Spel)为例。这里快速提个醒,SpEL是一种由Spring的org.springframework.expression.ExpressionParser实现分析和执行的语言。这些实现使用作为字符串给出的Spel表达式,并将它们转换为org.springframework.expression.Expression的实例。上下文组件由org.springframework.expression.EvaluationContext实现表示,例如:StandardEvaluationContext。

KevinLanK commented 7 years ago

最近有在做一个web项目,用spring做的,所以有学过,我就说一下我已经见到的设计模式。 很明显的一个模式是工厂模式,我这两天刚刚用到的HibernateSessionFactory,然后还有很多的Factory方法,都用到了这个模式。 单例模式,很明显的一个是在Bean,每一个注入的bean都是用到了单例模式,我记得spring in action 书里有提到这个。 观察者模式,在spring内我使用到的是web.xml的listener,除去这个,有一处我没有看的地方,但是是有的,是spring的通知,这里面用的最频繁的应该就是观察者模式了。 策略模式,InstantiationStrategy这个接口,包括实现这个接口的类,用了策略模式。 模板方法,我接触到两个,都是在连接数据库里,一个是JDBCTemplate,另一个是HibernateTemplate,两个数据库查询模板,主要作用是简化。我见到的几个模式就这些,spring还有别的模式,但是我没有用到或者学到了。