GOF之结构型模式Ⅰ(重点)

适配器模式(adapter: Adaptee+Adapter(实现接口))

将一个类的接口适配成用户所期待的,适配允许通常因为接口不兼容而不能在一起工作的类工作在一起
类适配器(继承) 对象适配器(组合) 组合优于继承
例:系统改造和升级;InputStreamReader与outpuStreamWriter(字节与字符转换)
UML(对象适配器):
在这里插入图片描述

代理模式(proxy :proxy(实现接口) + really(实现接口))

1)通过代理,控制对对象的访问,在方法调用前做前置处理,在方法调用后做后置处理
2)AOP(Aspect Oriented 面向切面编程 )的核心机制
3)应用场景 : 安全代理、远程代理、延迟加载
4)分类
静态代理:静态定义代理类
动态代理:动态生成代理类,自动生成
①JDK自带的动态代理
②javaassit字节码操作库实现
③CGLIB
④ASM(底层使用指令,可维护性较差)
UML(静态代理):
在这里插入图片描述
JDK自带的动态代理
java.lang.reflect.Proxy(动态生成代理类和对象) 和 reflect.InvocationHandler(处理器接口)
①生成处理类

public class DynamicProObject implements InvocationHandler {
	//实例对象
 	AllObject myObject = new ReallObject(); 
 	public DynamicProObject() {}

 	public DynamicProObject(AllObject myObject) {
  		super();
  		this.myObject = myObject;
 	} 
 	//处理方法
 	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
 		//对调用的方法做前置、后置处理
  		System.out.println("ago thing");
  		method.invoke(myObject, args);
  		System.out.println("after thing");
  		return null; 
 	}
}

②动态生成代理类和对象

public static void main(String[] args) {
  	AllObject myObject = new ReallObject();
  	//生成处理器
  	DynamicProObject handler = new DynamicProObject(myObject);
  	//生成代理对象
  	AllObject neProxy = (AllObject)Proxy.newProxyInstance(
                       				ClassLoader.getSystemClassLoader(), 
                         				new Class[] {AllObject.class},handler);
  	//调用需要进行前置、后置处理的方法
  	neProxy.mainThing();
 }

CGLIB动态代理

桥接模式 (bridge:Implementor + Abstraction)

多继承结构:违反单一职责原则,扩展不方便
取代多继承的方案,将事物分为多个维度处理,提高了系统的可扩展性
example:JDBC驱动程序;AWT的peer架构
UML:
在这里插入图片描述

组合模式 (composite)

把部分和整体的关系用树形结构表示,使得客户端可以使用统一的方式处理部分对象和整体对象
Component:抽象构件,叶子结点和容器构件的共同点
Composite:容器构件,可以包含子节点
Leaf:叶子构件,无子节点
接口中所构建的方法是一个天然递归调用
UML:
在这里插入图片描述

发布了82 篇原创文章 · 获赞 1 · 访问量 1476

猜你喜欢

转载自blog.csdn.net/qq_41891805/article/details/104703541