SSM分别用了什么设计模式
-
Spring的核心是Spring IoC,而Spring IoC的基本原理就是反射机制。
-
运用反射机制的目的就是要极大程度地增强java的可配置性和可扩展性。
-
主要的设计模式
一.动态代理模式
1.动态代理模式的意义在于生成一个代理对象,来代理真实对象,从而控制真实对象的访问。
责任链模式
1.责任链模式就是当动态代理模式的拦截器有多个时的设计模式。
2.比如对象调用【请假】,请假单需要项目经理审批,部门经理审批,人事部门审批…
观察者模式
1.观察者模式对我来说算是最容易理解的模式了吧,比如实现小游戏的时候或多或少都模拟了观察者模式。虽让有点出入,但大致符合观察者模式的思想了嘛。
(1)new一个女朋友中,我假设了一个“管理员”对象(一个线程)充当观察者,“自己”对象充当被观察者,属性会随着键盘事件和鼠标事件而改变。然后管理员对象就通过自己对象的变化来对女朋友对象进行操作,比如亲亲抱抱举高高。。。。啊呜。
工厂模式和抽象工厂模式
1.工厂模式还是用小游戏来加强记忆吧,其实现在想着想着就想把之前的小游戏全部重构为运用了设计模式的那种,那样才能加强对设计模式的理解嘛,可是…哭了。
(1)抽象出一个军火商(抽象工厂),这个军火商有坦克工厂和子弹工厂,甚至还可以再扩展导弹,大炮等工厂。而对局的双方无需知道到底有几个工厂,只需知道他们有一个统一的工厂——军火商即可。
(2)然后子弹工厂又有不同型号的子弹比如,9mm子弹,5.6mm子弹,300mm马克子弹笑死了。。。但是这些子弹都实现了子弹这个接口,它可以攻击。
建造者模式
1.建造者模式主要包含四个角色:
(1)Product(产品角色): 一个具体的产品对象。
(2)Builder(抽象建造者):创建一个Product对象的各个部件指定的抽象接口。
(3)ConcreteBuilder(具体建造者): 实现抽象接口,构建和装配各个部件。
(4)Director(指挥者): 构建一个使用Builder接口的对象。它主要是用于创建一个复杂的对象。它主要有两个作用,一是:隔离了客户与对象的生产过程,二是:负责控制产品对象的生产过程。
答案2-------------------------
https://blog.csdn.net/fallwind_of_july/article/details/93896995
- 设计模式:一套反复使用、经过分类编目的代码设计经验总结;
一、单例模式:
所谓单例设计模式简单说就是无论程序如何运行,采用单例设计模式的类(Singleton类)永远只会有一个实例化对象产生,并且提供一个全局的访问点。具体实现步骤如下:
(1) 将采用单例设计模式的类的构造方法私有化(采用private修饰)。
(2) 在其内部产生该类的实例化对象,并将其封装成private static类型。
(3) 定义一个静态方法返回该类的实例,通过静态方法返回instance对象
饿汉式,线程安全 但效率比较低,加载类即刻创造对象
(懒汉式)饱汉式,非线程安全,用到的时候才创建对象
懒汉式1:线程不安全
public class Singleton {
private static Singleton instance;
private Singleton (){}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
懒汉式2:线程安全
在懒汉式1的getInstance方法前加synchronized
饿汉式:线程安全(推荐)
class Singleton {
private Singleton() {} // 将构造方法封装为私有化
private static Singleton instance = new Singleton();// 在内部产生本类的实例化对象
public static Singleton getInstance() { // 通过静态方法返回instance对象
return instance;
}
public void showMessage() {
System.out.println("Hello World!");
}
}
class SingletonPatternDemo {
public static void main(String[] args) {
//不合法的构造函数
//编译时错误:构造函数 SingleObject() 是不可见的
//SingleObject object = new SingleObject();
//获取唯一可用的对象
SingleObject object = SingleObject.getInstance();
//显示消息
object.showMessage();
}
}
二、工厂模式:
意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
主要解决:主要解决接口选择的问题。
何时使用:我们明确地计划不同条件下创建不同实例时。
如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品。
关键代码:创建过程在其子类执行。
使用场景:
1、日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。
2、数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。
三、适配器模式:
将一个类的接口转换成客户期望的另一个接口,适配器让原本接口不兼容的类可以相互合作。
例如:手机充电器一般都是5V左右吧,咱天朝的家用交流电压220V,所以手机充电需要一个适配器
四、装饰者模式:
若要扩展功能,装饰者提供了比集成更有弹性的替代方案,动态地将责任附加到对象上。当我们设计好了一个类,我们需要给这个类添加一些辅助的功能,并且不希望改变这个类的代码,这时候就是装饰者模式大展雄威的时候了。这里还体现了一个原则:类应该对扩展开放,对修改关闭。
五、观察者模式:
观察者模式属于行为型模式,其意图是定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
六、迭代器模式:
迭代器模式属于行为型模式,其意图是提供一种方法顺序访问一个聚合对象中得各个元素,而又不需要暴露该对象的内部表示。
七、代理设计模式:
指由一个代理主题来操作真实主题,真实主题执行具体的业务操作,而代理主题负责其他相关业务的处理。
spring中用到的设计模式:
-
1.工厂设计模式
Spring使用工厂模式可以通过 BeanFactory 或 ApplicationContext 创建 bean 对象。
前者需要时创建bean,内存占用少,后者一次性创建所有的bean,内存消耗大,并且提供扩展功能。
ApplicationContext的实现类:ClassPathXmlApplication -
2.单例设计模式
有一些对象其实我们只需要一个,比如说:线程池、缓存、对话框、注册表、日志对象、充当打印机、显卡等设备驱动程序的对象。
**优点:**对于频繁使用的对象,可以省略创建对象所花费的时间,这对于那些重量级对象而言,是非常可观的一笔系统开销;由于 new 操作的次数减少,因而对系统内存的使用频率也会降低,这将减轻 GC 压力,缩短 GC 停顿时间。 -
Spring 中 bean 的默认作用域就是 singleton(单例)的
-
3.代理模式
Spring AOP 就是基于动态代理的,如果要代理的对象,实现了某个接口,那么Spring AOP会使用JDK Proxy,去创建代理对象,而对于没有实现接口的对象,就无法使用 JDK Proxy 去进行代理了,这时候Spring AOP会使用Cglib ,这时候Spring AOP会使用 Cglib 生成一个被代理对象的子类来作为代理 -
4.观察者模式
观察者模式是一种对象行为型模式。它表示的是一种对象与对象之间具有依赖关系,当一个对象发生改变的时候,这个对象所依赖的对象也会做出反应。Spring 事件驱动模型就是观察者模式很经典的一个应用。Spring 事件驱动模型非常有用,在很多场景都可以解耦我们的代码。比如我们每次添加商品的时候都需要重新更新商品索引,这个时候就可以利用观察者模式来解决这个问题。 -
5.适配器模式
适配器模式(Adapter Pattern) 将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。 -
我们知道 Spring AOP 的实现是基于代理模式,但是 Spring AOP 的增强或通知(Advice)使用到了适配器模式,与之相关的接口是AdvisorAdapter。如前置通知后置通知等。
-
在Spring MVC中,DispatcherServlet 根据请求信息调用 HandlerMapping,解析请求对应的 Handler。解析到对应的 Handler(也就是我们平常说的 Controller 控制器)后,开始由HandlerAdapter 适配器处理。HandlerAdapter 作为期望接口,具体的适配器实现类用于对目标类进行适配,Controller 作为需要适配的类。
-
6.模板方法模式
Spring 中 jdbcTemplate、hibernateTemplate 等以 Template 结尾的对数据库操作的类,它们就使用到了模板模式。
mybatis中用到的设计模式:
-
1.工厂模式
在Mybatis中比如SqlSessionFactory使用的是工厂模式,该工厂没有那么复杂的逻辑,是一个简单工厂模式。
SqlSession可以认为是一个Mybatis工作的核心的接口,通过这个接口可以执行执行SQL语句、获取Mappers、管理事务。 -
2.代理模式
代理模式可以认为是Mybatis的核心使用的模式,正是由于这个模式,我们只需要编写Mapper.java接口,不需要实现,由Mybatis后台帮我们完成具体SQL的执行。 -
3.适配器模式
例如Log的Mybatis接口和它对jdbc、log4j等各种日志框架的适配实现;