结构型——代理模式(Proxy)day13

【信息科学与工程学】【通信工程】第一百五十六篇 SD-WAN 领域核心的算法与函数02 (确认 GM/T 0028-2014、GB/T 43697-2024、GB/T 22239-2019 八类四十七控制域、Cipher Suites for TLS 1.3 RFC 8446 §9.1 代码点、ZUC-256、SM2/3/4/9 参数、TLCP 1.1、SDF/SKF 接口)。下面是编号 125–136​ 的完整表格——SASE 安全算法全集(等保 2.0 + 数据安全 + 国密双栈)。【类型】​ 合规量化 / 加权评分【领域】​ 安全(SASE 合规总纲​ ⭐,接续编号 18/38/44/1 阅读详情

基本介绍

1)代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作即扩展目标对象的功能。
2)被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象
3)代理模式有不同的形式,主要有三种静态代理、动态代理(JDK代理、接口代理)和Cglib 代理(可以在内存动态的创建对象,而不需要实现接口,他是属 于动态代理的范畴)。
4)代理模式示意图
在这里插入图片描述

静态代理

静态代理介绍

静态代理在使用时,需要定义接口或者父类,被代理对象(即目标对象)与代理对象一起实现相同的接口或者是继承相同父类
(感觉和装饰器模式Decorator有一点像)

应用实例

➢具体要求
1)定义一个接口:ITeacherDao
2)目 标对象TeacherDAO实现接口ITeacherDAO
3)使用静态代理方式,就需要在代理对象TeacherDAOProxy中也实现ITeacherDAO
4)调用的时候通过调用代理对象的方法来调用目标对象.
5)特别提醒:代理对象与目标对象要实现相同的接口,然后通过调用相同的方法来调用目标对象的方法.

在这里插入图片描述

package com.xhl.Proxy_Static;

public interface ITeacherDao {
	void teach();//授课的方法
}

package com.xhl.Proxy_Static;

public class TeacherDao implements ITeacherDao {

	@Override
	public void teach() {
		// TODO Auto-generated method stub
		System.out.println(" 老师授课中…………");
	}

}

package com.xhl.Proxy_Static;

public class TeacherDaoProxy implements ITeacherDao {

	private ITeacherDao target;
	
	
	public TeacherDaoProxy(ITeacherDao target) {
		super();
		this.target = target;
	}

	@Override
	public void teach() {
		// TODO Auto-generated method stub
		System.out.println("开始代理   做准备工作…………");
		target.teach();
		System.out.println("提交…………");
	}

}

package com.xhl.Proxy_Static;

public class StaticProxyDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		TeacherDao teacherDao = new TeacherDao();
		
		TeacherDaoProxy daoProxy = new TeacherDaoProxy(teacherDao);
		
		daoProxy.teach();
	}

}

分析:
1)优点: 在不修改目标对象的功能前提下,能通过代理对象对目标功能扩展
2)缺点:因为代理对象需要与目标对象实现一样的接口,所以会有很多代理类
3)一旦接口增加方法,目标对象与代理对象都要维护

动态代理

动态代理基本介绍

  1. 代理对象,不需要实现接口,但是目标对象要实现接口,否则不能用动态代理
  2. 代理对象的生成, 是利用JDK的API,动态的在内存中构建代理对象
  3. 动态代理也叫做: JDK 代理、接口代理

JDK中生成代理对象的API

  1. 代理 类所在包java.lang.reflect.Proxy
  2. JDK 实现代理只需要使用newProxyInstance方法,但是该方法需要接收三个参数,完整的写法是:
    static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)

应用实例

将上一个静态代理改为动态代理(即:JDK代理模式)

在这里插入图片描述

package com.xhl.Proxy_Dynamic;

public interface ITeacherDao {
	void teach();//授课的方法
	void sayHello(String name);
}
package com.xhl.Proxy_Dynamic;

public class TeacherDao implements ITeacherDao {

	@Override
	public void teach() {
		// TODO Auto-generated method stub
		System.out.println("老师授课中…………");
	}

	@Override
	public void sayHello(String name) {
		// TODO Auto-generated method stub
		System.out.println("hello  "+name);
	}

}

package com.xhl.Proxy_Dynamic;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class ProxyFactory {
	private Object target;

	public ProxyFactory(Object target) {
		super();
		this.target = target;
	}
	
	
	//给目标对象生成一个代理对象
	public Object getProxyInstance() {
		//说明
		/*
		* public static Object newProxyInstance(ClassLoader loader,
												Class<?>[] interfaces,
												InvocationHandler h)
			//1. ClassLoader loader :指定 当前目标对象使用的类加载器,获取加载器的方法固定
			//2. Class<?>[] interfaces: 目标对象实现的接口类型,使用泛型方法确认类型
			//3. InvocationHandlerh:事情处理,执行目标对象的方法时,会触发事情处理器方法,会把当前执行
			的目标对象方法作为参数传入
		*/
		return Proxy.newProxyInstance(target.getClass().getClassLoader(),
				target.getClass().getInterfaces(),
				new InvocationHandler() {
					
			//proxy:代理对象,method:目标对象的方法,args:方法所需要的参数
					@Override
					public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
						System.out.println("JDK代理开始~~~~~~~");
						//反射机制调用目标对象的方法
						Object returnVal = method.invoke(target, args);
						System.out.println("JDK代理提交");
						return returnVal;
					}
				});

	}
}
package com.xhl.Proxy_Dynamic;

public class ProxyDynamicDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ITeacherDao target = new TeacherDao();
		//给目标对象,创建代理对象,可以转成ITeacherDao
		ITeacherDao proxyInstance = 
				(ITeacherDao)new ProxyFactory(target).getProxyInstance();
		
		//proxyInstance=class com.sun.proxy.$Proxy0内存中动态生成了代理对象
		System.out.println("proxyInstance="+proxyInstance.getClass());
		
		//通过代理对象调用目标对象的方法
		proxyInstance.teach();//实际直接进入invoke方法
		//proxy:代理对象——Proxy0
		//method:目标对象的方法——com.xhl.Proxy_Dynamic.ITeacherDao.teach();
		//args:方法所需要的参数 ——null
		
		proxyInstance.sayHello("Tom");
		//proxy:代理对象——Proxy0
		//method:目标对象的方法——com.xhl.Proxy_Dynamic.ITeacherDao.sayHello(java.lang.String);
		//args:方法所需要的参数 ——"Tom";
	}

}

在这里插入图片描述

Cglib代理

Cglib代理基本介绍

  1. 静态代理和JDK代理模式都要求目标对象是实现一个接口,但是有时候目标对象只是一个单独的对象,并没有实现任何的接口,这个时候可使用目标对象子类来实现代理-这就是Cglib代理
  2. Cglib代理也叫作子类代理,它是在内存中构建一个子类对象从而实现对目标对象功能扩展,有些书也将Cglib代理归属到动态代理。
  3. Cglib是一个强大的高性能的代码生成包,它可以在运行期扩展java类与实现java接口.它广泛的被许多AOP的框架使用,例如Spring AOP,实现方法拦截
  4. 在AOP编程中如何选择代理模式:
    1.目标对象需要实现接口,用JDK代理
    2.目标对象不需要实现接口,用Cglib代理
  5. Cglib包的底层是通过使用字节码处理框架ASM来转换字节码并生成新的类

Cglib代理模式实现步骤

  1. 需要引进Cglib的jar文件
    Cglib用到的4个jar包
    下载地址:https://download.youkuaiyun.com/download/zero_ko/12625017

  2. 在内存中动态构建子类,注意代理的类不能为final,否则报错
    java.lang.IllegalArgumentException

  3. 目标对象方法如果为final/static,那么就不会被拦截,即不会执行目标对象额外的业务方法

应用实例

将上一个动态代理改为Cglib代理
在这里插入图片描述

package com.xhl.Proxy_Cglib;


public class TeacherDao {
	public String teach() {
		System.out.println("老师授课中*****");
		return "hello";
	}
}

package com.xhl.Proxy_Cglib;

import java.lang.reflect.Method;

import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

public class ProxyFactory implements MethodInterceptor{
	//维护一个目标对象
	private Object target;
	
	public ProxyFactory(Object target) {
		super();
		this.target = target;
	}

	//返回一个代理对象:是target对象的代理对象
	public Object getProxyInstance(){
		//1、创建一个工具类
		Enhancer enhancer = new Enhancer();
		//2、设置父类
		enhancer.setSuperclass(target.getClass());
		//3、设置回调函数
		enhancer.setCallback(this);
		//4、创建子类对象,即代理对象
		return enhancer.create();
		
	}

	//重写intercept方法,会调用目标对象的方法
	@Override
	public Object intercept(Object arg0, Method method, Object[] args, MethodProxy arg3) throws Throwable {
		System.out.println("Cglib代理模式开始");
		Object returnVal = method.invoke(target, args);
		System.out.println("Cglib代理模式提交");
		return returnVal;
	}

}
package com.xhl.Proxy_Cglib;

public class ProxyCglibDemo {
	public static void main(String[] args) {
		TeacherDao target = new TeacherDao();
		
		TeacherDao proxyInstance = 
				(TeacherDao) new ProxyFactory(target).getProxyInstance();
		
		String res = proxyInstance.teach();
		System.out.println("res="+res);
	}
}

几种常见的代理模式介绍——几种变体

  1. 防火墙代理
    内网通过代理穿透防火墙,实现对公网的访问。
  2. 缓存代理
    比如:当请求图片文件等资源时,先到缓存代理取,如果取到资源则ok,如果取不到资源,再到公网或者数据库取,然后缓存。
  3. 远程代理
    远程对象的本地代表,通过它可以把远程对象当本地对象来调用。远程代理通过网络和真正的远程对象沟通信息。
  4. 同步代理: 主要使用在多线程编程中,完成多线程间同步工作
    同步代理:主要使用在多线程编程中,完成多线程间同步工作
让 ME51N 在采购信息记录过期时不要带出上一次采购订单的价格 在采购信息记录(PIR)价格条件无效或过期时,到上一次采购订单价格进行提议;你可以通过关闭,并在把PO price设置为不采纳,再辅以把过期的价格来源直接拦截为错误。若仍需 100% 阻断,可用在保存前清空估价价格作为技术兜底。标准行为与配置证据见文内引用。 阅读详情

相关推荐

51单片机基础知识

前言 周末闲着无聊,以后定时更新一期关于51单片机的学习案例,以供大家平时参考使用。至于单片机,你可以理解为人的大脑,而人各项身体器官的运作需要意识给到大脑,然后大脑再驱动我们的中枢神经进行相应的动作,这里的意识可以理解为我们要写的程序,而人的器官相当于各种输出设备,例如我们以后要学的LED、电机、各种传感器等等。学好单片机能让你找到一份相对不错的工作,当然越可观的东西也是要付出相应努力的。 一、51单片机是什么? 通常我们一说到 51 单片机,指的都是兼容IntelMCS-51体系架构的一系列单片机,而

qq_43537819的博客 6903

代理模式的简单理解(结构型)

代理模式指的是为其他对象提供一种代理,并以控制对这个对象的访问。 下面代理模式的一个简单示意图: 代理类和实现类都需要实现一个共同的接口,代理类通过调用实现类来完成具体的操作,下面来举一个"借刀杀人"的例子来说明一下这种关系: 首先定义一个接口: public interface Killers { public void killPeople(); public void g

记忆碎片 1141

Rstan下载安装攻略

准备把Rtools删掉,重新下载(胡乱猜测是安装顺序的问题),但是卸载时显示Rtools被占用,但我已经把该关的都关了。这一问题的出现,直接让我卸载掉了Rstudio,又重新安装了一个,不过这次安装在另一个磁盘,因为原来的内存不多了。或者参考知乎,使用清华镜像网址进行下载:(知乎链接)https://zhuanlan.zhihu.com/p/346947595(清华下载链接)https://mirrors.tuna.tsinghua.edu.cn/CRAN/bin/windows/Rtools/

m0_64643017的博客 3099

结构型模式之代理模式(Java版)

设计模式概述及分类: https://blog.youkuaiyun.com/qq_34896730/article/details/105324092 面向对象设计原则:https://editor.youkuaiyun.com/md/?articleId=105352240       代理模式是常用的结构型设计模式之一,当无法直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,所访问的真实对象与代理对象需要实现相同的接

qq_34896730的博客 781

避开这些坑!QMT多因子策略实盘中的5个常见错误及解决方案

本文深入剖析了在QMT平台上实施多因子策略时常见的5个错误,包括因子过拟合、数据延迟处理不当、因子失效、交易成本低估和风险控制缺失,并提供了实用的解决方案。通过优化因子筛选、数据对齐和动态管理,帮助量化交易者提升策略稳健性和实盘表现。

k5l6m的博客 238

【硬件】通俗易懂的讲解晶体管(三极管和MOS管)的工作原理

晶体管是一个简单的元器件,可用于构建许多有趣的项目。在本文中,我将用通俗易懂的语言给您讲解晶体管的工作原理,以便您可以在电路设计中更好的使用静态管。一旦你学习这些基础知识,对以后的设计和使用来说,将会变得非常容易。我们将重点介绍两种最常见的晶体管:双极型晶体管(三极管)和MOSFET。晶体管的工作原理其实是类似于电子开关。它可以打开和关闭电路。一个简单的思考方法是将晶体管视为无源的继电器。晶体管类似于继电器,从某种意义上说,您可以使用它来打开和关闭某些东西。但晶体管也可以部分导通,一般在放大电路中使用,这部

1万+

一文彻底搞懂代理模式(Proxy)

代理模式 引言 代理模式的定义与特点 代理模式的结构 模式实现 静态代理 动态代理 总结 与装饰者模式 文章已收录我的仓库:Java学习笔记与免费书籍分享 代理模式 引言 代理模式是非常常见的模式,在生活中的例子也非常多,例如你不好意思向你关系不太好朋友帮个忙,这时需要找一个和它关系好的应一个朋友帮忙转达,这个中间朋友就是代理对象。例如购买火车票不一定要去火车站买,可以通过12306网站或者去火车票代售点买。又如找女朋友、找保姆、找工作等都可以通过找中介完成。 代理模式的定义与特点 代理模.

m0_51380306的博客 2万+

VTK GPU 加速渲染技术

/ 创建颜色工具// 创建立方体数据// 创建OpenGL映射器(注意使用vtkOpenGLPolyDataMapper而不是常规的vtkPolyDataMapper)// 启用VBO(顶点缓冲对象)// 声明几何体是静态的以获得最佳性能// 创建actor// 创建渲染器、渲染窗口和交互器renderWindow->SetWindowName("VTK自定义着色器示例");// 添加actor到渲染器。

深之JohnChen的专栏 1240

23种设计模式 第二部分 结构模式(3) 代理模式

理解 租房子找中介其实就是找代理。多出一个代理类来,对已有对象做相关控制的操作。在租房子的时候回去找中介,为什么呢?因为你对该地区房屋的信息掌握的不够全面,希望找一个更熟悉的人去帮你做,此处的代理就是这个意思。再如我们有的时候打官司,我们需要请律师,因为律师在法律方面有专长,可以替我们进行操作,表达我们的想法。 实现 首先定义一个接口。 public interface Sourc

有志者事竟成 687

CUDA-GDB(11)——调试示例演练

本博客包含三个CUDA-GDB的演练示例: ​​​​▶ Example: bitreverse ▶ Example: autostep ▶ Example: MPI CUDA Application

AI-安全-功耗 1512

RK平台PCIE-Ethernet扩展:Intel I210移植与性能飞升之路

本文详细介绍了Intel I210千兆以太网控制器在瑞芯微RK平台的移植与优化过程。通过硬件适配、内核配置、驱动开发及性能调优四个关键环节,实现了RK平台的网络性能提升。硬件方面,重点说明了PCIE接口的规范连接与供电检查;软件方面,系统阐述了内核配置、设备树修改和驱动编译流程。在性能优化环节,详细介绍了中断优化、缓冲区设置和TCP/IP协议栈调优策略,并采用Iperf和Netperf工具进行量化测试验证。测试结果显示,优化后的网络吞吐量提升20%以上,延迟降低40%,为工业控制、智能安防等场景提供了可靠的

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 350

java动静态代理实现原理

一.什么是代理? 代理是不直接通过代理类访问方法,而是通过被代理类的代理对象,间接访问代理类里面的方法。 就好比:(代理类)相亲女——婚介所(代理对象)这种模式,直接通过婚介所(代理对象),知道相亲女的择偶要求(代理类)。 1.代理有几种? 一.代理分为静态代理和动态代理 静态代理:是在编译期时,知道哪个是被代理的类,那么使用类的静态代理。 动态代理:在编译期时,不知道哪个是被代理的类,那么使用类的动态代理。 二.静态代理的实现 创捷一个接口类(女孩) public interface Girl {

A232222的博客 408

黑猫带你学eMMC协议第11篇:eMMC擦除详解(erase/trim/discard/sanitize/secure erase/secure trim...)

erase命令单位是擦除组,那么一个擦出组包含多个写块,不同写块有不同信息,主机擦除之前,必须进行确定好这些写块中的信息没有用了。所以通常erase用来擦除整个设备或分区。erase完成后,将erase的区域都要么是全0,要么是全1。那么到底是0还是1呢,根据不同的工艺有所不同,但是别担心,在ecsd[181]中会有说明到底是1还是0。erase命令的作用就是简单的将映射地址范围移动到未映射的地址范围。

黑猫奥利奥的博客 7795

23个设计模式一文搞懂

本笔记涵盖 23 种经典设计模式,按创建型、结构型、行为型三大类整理。每个模式配有生活类比、核心思想、结构图解、实现要点、真实应用案例、适用场景、优缺点分析及常见面试题。

weixin_72753562的博客 802

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

工作中使用到的单词(软件开发)

1.エイリアス   alias 别名 powershell使用 get-help 命令时,会得到与此命令 相关(别名)的命令 2.プロキシ proxy 代 理 3.プロモート   promote 促进,提升   开发的系统新功能上线发布,有时会使用到这个词,比如 STプロモート 还有使用リリース这个词的。比如STリリース。个人认为两者含义相同。 4.見逃し み................................................................

sun0322 6万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

以太坊哈希算法升级:从波塞冬到抗量子密码学的技术演进与应对

哈希算法是区块链技术的核心基石,它通过单向加密函数确保数据的完整性与不可篡改性。其原理是将任意长度输入映射为固定长度输出,具备抗碰撞性,是构建默克尔树、生成账户地址和保障共识机制安全的基础。在工程实践中,哈希算法的选择直接影响着智能合约的可靠性、网络的安全性以及系统的扩展性。随着量子计算的发展,传统算法面临新的安全挑战,后量子密码学成为重要演进方向。本文聚焦于以太坊生态中关于波塞冬哈希算法与抗量子升级的讨论,结合质押率变化和算力波动等链上数据,分析其对智能合约开发、节点运营及资产安全的具体影响,为开发者与参

weixin_30615767的博客 414

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

HarmonyOS ArkTS API 24智慧停车管理应用:plate和spot字段可以通过外键关联到 VehicleMeta 和 ParkingSpotMeta 表,但在此接口中它们被直接内联

在移动互联网与智能穿戴设备高度普及的今天,"习惯养成"已经从一个模糊的自我管理理念,演变为一个可量化、可追踪、可视化的数字化产品赛道。越来越多的人希望借助手中的智能终端,把"早起、冥想、阅读、运动"这些抽象的自律行为,转化为一条条清晰的数据曲线和一张张可触摸的打卡卡片。而鸿蒙生态(HarmonyOS)凭借其跨设备协同、分布式软总线以及声明式 UI 开发框架 ArkUI,为这类注重"轻量化交互 + 即时反馈"的生活方式类应用提供了极为理想的生长土壤。本应用正是一款面向"晨间场景"深度打磨的习惯追踪工具。它聚焦

2401_86031952的博客 104

HarmonyOS 6效果实现:底部弹出式表单(新增手冲记录、发布豆单交换)

引言:鸿蒙生态下的垂直社区应用开发新纪元随着HarmonyOS 6.1.1版本的正式发布,鸿蒙操作系统在分布式能力、UI渲染性能、开发体验等多个维度迎来了全面升级。作为鸿蒙生态的核心开发语言,ArkTS在HarmonyOS ArkTS API 24中提供了更加丰富的声明式UI组件、更加完善的状态管理机制以及更加高效的渲染管线,为开发者构建高质量的原生应用提供了强有力的技术支撑。本文将通过一个完整的精品咖啡手冲社区应用案例,深度剖析基于HarmonyOS API 24的全链路开发实践,从数据模型设计、状态管理

2501_92985290的博客 278

创建型——工厂系列(Factory)day04

任何可以产生对象的方法或类,都可以称为工厂 单例也是一种工厂 为什么有了new以后,还要有工厂? 1、灵活控制生产过程 2、权限、修饰、日志…… 接口模式 package cn.xhl.interfacemodel; public interface IFruit { public void plant(); public void harvest(); public void grow(); } package cn.xhl.interfacemodel; public class ..

zero_ko的博客 2502

创建型——建造者(Builder)day06

分离复杂对象的构建和表示 同样的构建过程可以创建不同的表示 建造者模式和模板方法模式非常像 建造者模式强调构造对象 模板方法模式强调方法执行 基本介绍 1、建造者模式(Builder Pattern)又叫生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。 2、建造者模式是一步一步创建一个复 杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。 建造者的四个角色 1、.

zero_ko的博客 2419

结构型——外观模式(Facade)&&行为型——中介者模式(Mediator)day11

结构型——外观模式(Facade) 外观模式基本介绍 外观模式(Facade),外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用 外观模式通过定义一个一致的接口,用以屏蔽内部子系统的细节,使得调用端只需跟这个接口发生调用,而无需关心这个子系统的内部细节 一个简单的例子理解:去一些政府部门办事,会跑很多不同的部门,可能去了部门A,部门A又让你去部门B……这样就很麻烦 如果使用门面模式,用户只需要访问门面,由门面模式去协调内部的关系。 外观模式

zero_ko的博客 442

行为型——命令模式(Command) day15

目录命令模式基本介绍命令模式的原理类图实例——智能生活项目需求命令模式的总结 命令模式基本介绍 命令模式(Command Pattern) :在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计 命名模式使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活,实现解耦。 在命名模式中,会将一个请求封装为一个对象,以便使用不同参数来表示不同的请求(即命名),同

zero_ko的博客 330

设计模式七大原则day01

设计模式七大原则 单一职责原则: 单一职责原则(Single Responsibility Principle, SRP)的定义是:指一个类或者模块应该有且只有一个改变的原因。如果一个类承担的职责过多,就等于把这些职责耦合在一起了。一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当发生变化时,设计会遭受到意想不到的破坏。而如果想要避免这种现象的发生,就要尽可能的遵守单一职责原则。此原则的核心就是解耦和增强内聚性。 含义:对于一个类,只有一个引起该类变化的原因;该类的职责是

zero_ko的博客 317

行为型——模板方法模式(Template)day14

模板方法模式基本介绍 模板方法模式 (Template Method Pattern),又叫模板模式(Template Pattern), 指 在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。 简单说, 模板方法模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构,就可以重定义该算法的某些特定步骤 这种类型的设计模式属于行为型模式。 模板方法模式原理类图 ➢对原理类图的说明-即(模板方法模式的角色及职责)

zero_ko的博客 313

结构型——适配器模式(Adapter)day07

基本介绍 适配器模式(Adapter Pattemn)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。 其别名为包装器(Wrapper) 适配器模式属于结构型模式 主要分为三类:类适配器模式、对象适配器模式、接口适配器模式 工作原理 适配器模式:将一个类的接口转换成另一种接口.让原本接口不兼容的类可以兼容 从用户的角度看不到被适配者,是解耦的 用户调用适配器转化出来的目标接口方法,适配器再调用被适配者的相关接口方法 用户收到反馈结果

zero_ko的博客 272

结构型——桥接模式(Bridge)day08

桥接模式基本介绍 桥接模式(Bridge模式)是指:将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变。 是一种结构型设计模式 Bridge模式基于类的最小设计原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责。它的主要特点是把抽象(Abstraction)与行为实现(Implementation)分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展 桥接模式原理图 说明: Client类:桥接模式的调用者 抽象类(Abstraction) :维护了Implementor/

zero_ko的博客 269
上一篇: 结构型——享元模式(Flywight)day12
下一篇: 树结构的应用day6.5
哆唻咪à
博客等级 码龄9年 0粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值