设计模式总结

说说ioc与aop

IOC 控制反转容器控制程序对象之间的关系,而不是传统实现中,有程序代码之间控制,
又名依赖注入。All 类的创建,销毁都由Spring 来控制,也就是说控制对象生命周期的不是
引用他的对象,而是Spring。对于某个对象而言,以前是他控制其他对象,现在是all 对象
都被spring 控制,这就叫控制反转
依赖注入的思想时通过反射机制实现的。在实例化一个类时,它通过反射调用类中的set
方法将事先保存在hashmap 中的类属性注入到类中
Spring 实现aop:
将那些与业务无关,却为业务模块所公共调用的逻辑或责任封装起来,称其
为aspect,便于减少系统的重复代码。使用模块技术,aop 把软件系统分为两个部分:核心
关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注
点。实现aop 的两大技术:1)采用动态代理,利用截取消息的方式,对该消息进行装饰,
以获取原有对象行为的执行。2)采用静态织入,引入特定的语法创建切面,从而可以使编
译器可在编译期间织入有关切面的代码。
JDK 动态代理,cglib 动态代理。
JDK 动态代理:其代理对象必须是某个接口的实现,他是通过在运行期间创建一个接口
的实现类来完成对目标对象的代理。核心类有:InnovactionHandler,Proxy。
Cgib 动态代理:实现原理类似于jdk 动态代理,只是他在运行期间生成的代理对象是针
对目标类扩展的子类。MethodInterceptor

说说代理模式

静态代理与继承代理
动态代理,javac和反射取出动态类
反射
1)proxy 类:
类的静态方法用来生成动态代理的实例
2)innovationhandler 接口有一个invoke 方法,用来
集中处理在动态代理类对象的方法调用,通常在该方法中实现对委托类的代理访问,每次生
成动态代理对象时都要指定一个对应的调用处理器
CGlib 动态代理:jdk 代理机制只能代理
实现了接口的类,而没有实现接口的类不能用jdk 动态代理。CGlib 是针对类来实现代理,
他的原理是对指定的目标类生成一个子类,并且覆盖其中方法实现增强,因为采用的是继承,
所以不能对final 修饰的类进行代理,methodinterceptor

代理模式和装饰模式的区别?

代理是
在内部生成一个代理对象,构造函数参数为空。装饰的构造函数参数有一个对象,就是对这
个对象进行装饰。

jdk 中的设计模式:

1)单例,比如Runtime 类;
2)静态工厂Interger a=Integer.valueOf(intor String);
3) 迭代器模式Collection.interator();
4) 原型设计模式,clone 方法;
5 )适配器 inputStreamReader 和outputStreamWriter;
6)桥接模式,jdbc,抽象部分与实现相分离;
7)装饰模式Reader 和bufferedBeader;
8)代理,jdk 动态代理;
9)观察者observable 和observer;
10)责任链,classloader 的双亲委派模型;
11 )组合,某个类型的方法同时也接收自身类型作为参数
java.util.list.addall(collection);
12)抽象工厂,一个创建新对象的方法,返回的是接口或抽象类
Connection c=DriverManager.getConnection();
13) 工厂方法,返回一个具体对象的方法Proxy.newProxyInstance;
14)解释器模式,该模式通常定义了一个语言的语法,java.util.pattern

单例设计模式

饿汉式、懒汉式
双锁机制
public static Singleton getInstance()
{
if(singleton==null)
{
synchronized(Singleton.class)
{
if(singleton==null){
singleton=new Singleton();
}
}
}
return singleton;
}

简单工厂

数据库模型

工厂方法

抽象工厂

观察者设计模式

推模型,也就是被观察者根据状态发生改变时将所有信息都主动通知观察者
拉模型,即观察者主动向被观察者索要信息
观察者模式应用场景
1、对一个对象状态的更新,需要其他对象同步更新,而且其他对象的数量动态可变
2、对象仅需要将自己的更新通知给其他对象而不需要知道其他对象的细节

职责链设计模式

模拟过滤器

迭代器设计模式

模拟集合Iterator

设计模式原则

开闭原则:一个软件实体应当对开展开放,对修改关闭(玉帝招安美猴王)
面向对象解释: 不予以更改的是抽象层,但是可以扩展的是实现层
对可变性的封装原则: 找到一个系统的可变因素,将之封装起来
里氏代换原则: 任何基类可以出现的地方,子类一定可以出现
依赖倒转原则: 要依赖于抽象,不要依赖于实现
接口隔离原则: 应当为客户端提供尽可能小的单独的接口,而不要提供大的总接口

热评文章