Spring的主要设计模式

前言

1.最近在准备学ssm框架,买的书是《javaEE互联网轻量级框架整合开发》,以及在HOW2J教程上学。
2.how2j讲究基于代码的学习方法。我希望我还可以基于笔记。本教主觉得将自己的理解写下来还是很nice的,虽然自己很菜,但是,,,可以练一下打字速度啊emmmmmmmmmm
3.代码的话,我觉得刚学的时候不想上代码,虽然书上有现成的代码,但是真的时自己可以理解这种模式,但是代码有点老火。。。。


java反射机制

1.反射机制是建立在类对象上的。

(1)类对象概念: 所有的类,都存在一个类对象,这个类对象用于提供类本身的信息,比如有几种构造方法, 有多少属性,有哪些普通方法。

2.Spring的核心是Spring IoC,而Spring IoC的基本原理就是反射机制。
3.运用反射机制的目的就是要极大程度地增强java的可配置性和可扩展性。
4.例子

(1)ReflectServiceImpl.java 通过反射配置信息去构建一个类(构造方法无参数, 即只有默认的构造方法)

package demo;

public class ReflectServiceImpl {
	public void sayHello(String name) {
		System.err.println("Hello" + name);
	}
}

(2)demo.java

package demo;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Demo {
	ReflectServiceImpl object = null;

	public Object reflect() {
		try {
			//1.先通过类加载器注册一个类,再用newInstance()来初始化一个对象
			object = (ReflectServiceImpl) Class.forName("demo.ReflectServiceImpl").newInstance();
			//2.获取方法对象
			Method method = object.getClass().getMethod("sayHello", String.class);
			method.invoke("教主");
		} catch (ClassNotFoundException |
				InstantiationException |
				NoSuchMethodException |
				SecurityException |
				IllegalAccessException |
				IllegalArgumentException |
				InvocationTargetException ex) {
			ex.printStackTrace();
		}
		return object;
	}
}


主要的设计模式

一.动态代理模式

1.动态代理模式的意义在于生成一个代理对象,来代理真实对象,从而控制真实对象的访问。
2.代理模式其实逻辑还是比较好理解的,但是代码真的有点看不懂,难受想哭呜呜呜呜。
3.动态代理模式里面有几个专有名词:

(1)真实对象:
(2)代理对象:
(3)代理逻辑方法:这个方法封装了代理对象怎么去代理真实对象。当通过代理对象调用真实对象的方法时,是否拦截,
                                   怎样调用…这些过程都封装在代理逻辑方法里面。

4.最常用的代理模式:
(1) jdk动态代理技术 CGLIB动态代理技术
implements InvocationHandler MethodInterceptor
1.建立代理对象和真实对象的关系 bind(真实对象) getProxy(真实对象)
2.实现代理对象的逻辑方法 @Override invoke(代理对象,当前要调用的方法,调用方法的参数) @Override intercept(代理对象,方法,方法参数,方法代理)

(2)拦截器
我觉得拦截器就是将代理逻辑方法交给设计者完成。设计者只需把拦截器接口给开发者,开发者就不用关心代理的逻辑了。

接口的方法 描述
boolean before(代理对象,真实对象,运行方法,运行方法参数) -
void around(代理对象,真实对象,运行方法,运行方法参数) 如果before()返回false就调用around
void after(代理对象,真实对象,运行方法,运行方法参数) around()执行之后执行after()方法

三.责任链模式

1.责任链模式就是当动态代理模式的拦截器有多个时的设计模式。
2.比如对象调用【请假】,请假单需要项目经理审批,部门经理审批,人事部门审批…

四.观察者模式

1.观察者模式对我来说算是最容易理解的模式了吧,比如实现小游戏的时候或多或少都模拟了观察者模式。虽让有点出入,但大致符合观察者模式的思想了嘛。

(1)new一个女朋友中,我假设了一个“管理员”对象(一个线程)充当观察者,“自己”对象充当被观察者,属性会随着键盘事件和鼠标事件而改变。然后管理员对象就通过自己对象的变化来对女朋友对象进行操作,比如亲亲抱抱举高高。。。。啊呜。

五.工厂模式和抽象工厂模式

1.工厂模式还是用小游戏来加强记忆吧,其实现在想着想着就想把之前的小游戏全部重构为运用了设计模式的那种,那样才能加强对设计模式的理解嘛,可是…哭了。

(1)抽象出一个军火商(抽象工厂),这个军火商有坦克工厂和子弹工厂,甚至还可以再扩展导弹,大炮等工厂。而对局的双方无需知道到底有几个工厂,只需知道他们有一个统一的工厂——军火商即可。
(2)然后子弹工厂又有不同型号的子弹比如,9mm子弹,5.6mm子弹,300mm马克子弹笑死了。。。但是这些子弹都实现了子弹这个接口,它可以攻击。

六.建造者模式

1.建造者模式主要包含四个角色:

(1)Product(产品角色): 一个具体的产品对象。
(2)Builder(抽象建造者):创建一个Product对象的各个部件指定的抽象接口。
(3)ConcreteBuilder(具体建造者): 实现抽象接口,构建和装配各个部件。
(4)Director(指挥者): 构建一个使用Builder接口的对象。它主要是用于创建一个复杂的对象。它主要有两个作用,一是:隔离了客户与对象的生产过程,二是:负责控制产品对象的生产过程。

2.建造者模式没有怎么理解,可能是因为例子不怎么生动形象吧。好像是说对于复杂的对象,用组装的方法进行创建。先生成零件。然后将所有的零件组装起来。

你可能感兴趣的:(web后端,设计模式)