设计模式

 

设计模式六大原则

  1. 开放封闭原则。对扩展开放,对修改关闭。
  2. 里氏替换原则。凡是基类能够出现的场合,子类也一定能够出现。
  3. 依赖倒转原则。针对接口编程,依赖于抽象而不依赖具体。
  4. 迪米特法则(最少知道原则)。一个类要尽量少的与其他类相互作用,保证功能的独立性。
  5. 合成复用原则。尽量使用组合(has a),避免使用继承(is a)
  6. 单一职者原则。一个类只负责一项职责。

 

1.单例模式(每个类只有一个对象实例)

Class Singleton{

Private volatile static singleton;

Private Singleton(){}

Public Singleton getInstance(){

If (singleton == null) {

Synchronized(Sin)

}

Return singleton;

}

}

Spring的ioc容器管理的bean对象作用域可以设置为单例

 

2.原型模式(根据原型对象的类型,通过拷贝来创建新对象,避免new对象过程太长了) 实现cloneable接口,重写clone方法,调用clone方法。(可以用来实现深浅拷贝)

Spring的ioc容器管理的bean对象作用域可以设置为多例

 

3.工厂模式和抽象工厂模式(都是为了解决接口的选择问题)

工厂模式:三个角色,抽象产品,具体产品和具体工厂。具体产品实现抽象产品,具体工厂里面有一个生成产品的方法,根据产品的名字或者其他信息来生产具体产品,从而解产品(接口)的选择问题。

抽象工厂模式:抽象产品,具体产品和具体工厂和抽象工厂。相当于在工厂的基础上对工厂也进行了抽象。

 

4.建造者模式:使用多个简单的对象一步一步构建成一个复杂的对象。

5.适配器模式:旧版本中的接口兼容新版本的接口。

6.桥接模式:将抽象部分和实现部分分离,使他们都可以独立的变化。

7.装饰器模式:在不修改类源码的基础上,对类的功能进行扩展。

8.代理模式:生产一个目标对象的代理对象来调通目标对象的方法。

对于代理类,如何调用对象的某一功能是思考重点,而不需要兼顾对象的所有功能;
对于装饰类,如何扩展对象的某一功能是思考重点,同时也需要兼顾对象的其它功能

比如io流中有节点流和处理流

静态代理模式:即在编译阶段完成代理类的加载。

动态代理模式:基于jdk提供的proxy类来实现接口的动态代理和cglib提供的enhancer来提供子类的动态代理,spring aop必须是目标对象实现了接口,是利用proxy类的newProxyInstance()通过反射获取目标对象的类信息,然后配合第三个参数InvokeHandler拦截器来生成代理对象。

Cglib使用的是Enhancer.create方法,他的原理是利用asm字节码生成框架,使用字节码生成技术生成代理类,比java反射的效率高。

  1. 观察者模式(当对象存在一对多关系的时候,就可以使用观察者模式,比如一个对象修改时,会自动通知依赖他的对象)
  2. 策略模式(多个相似算法,在做选择的时候避免使用if else判断,便于代码维护)
  3. 模板模式(一些方法通用,但是在子类中都需要重新写这个方法,那就将这个方法定义一个标准流程用final关键字修饰) 抽象的模板类,里面有抽象方法和final修饰的具体实现方法的标准流程。然后具体的实现类来继承模板类,实现抽象方法。

 

spring中的设计模式:

1.单例模式

Spring ioc容器中管理的bean的作用域为singleton

2.原型模式

Spring ioc容器中管理的bean的作用域为prototype

3.模板模式

比如JDBCTemplate,采用模板模式来实现,jdbc的步骤是固定的

  1. 加载数据库驱动
  2. 建立间接
  3. Statement执行sql
  4. Resultset获得结果集
  5. 释放资源

 

4.观察者模式(当对象间存在一对多关系时,可以使用观察者模式,即一个对象修改时会通知依赖它的对象,从而更新依赖) spring中使用观察者的是事件监听。

5.简单工厂模式:beanfactory的getbean方法根据xml中配置的bean信息来创建bean对象。

6.代理模式:spring AOP

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值