6 合成(Composite)模式

1.含义

合成模式把部分和整体的关系用树结构表示出来。合成模式使得客户端把一个个单独的成分对象和由它们复合而成的合成对象同等看待。

 

2.类图

安全式和透明式的合成模式


安全式的合成模式:

叶子节点中没有管理聚集的方法,只有合成对象里才有。


透明式的合成模式:管理聚集的方法被移动到了接口中,叶子和合成对象都有这些方法,相对透明但不安全,叶子并不需要那些方法,一般实现了也是空方法体。


 

3.类代码

安全式的

/*
 * 抽象构件角色
 */
public interface Component {
	Composite getComposite();

	void sampleOperation();
}


/*
 * 树枝构件角色
 */
public class Composite implements Component {
	private Vector componentVector = new java.util.Vector();

	public Composite getComposite() {
		return this;
	}

	public void sampleOperation() {
		Enumeration e = components();
		while (e.hasMoreElements()) {
			((Component) e.nextElement()).sampleOperation();
		}
	}

	public void add(Component c) {
		componentVector.addElement(c);
	}

	public void remove(Component c) {
		componentVector.removeElement(c);
	}

	public Enumeration components() {
		return componentVector.elements();
	}
}


/*
 * 树叶构件角色
 */
public class Leaf implements Component {
	public void sampleOperation() {
	}

	public Composite getComposite() {
		return null;
	}
}


/*
 * 测试类
 */
public class Test {

	public static void main(String[] args) {
		Composite c = new Composite();
		Leaf l = new Leaf();
		c.sampleOperation();
		l.sampleOperation();
		c.add(c);
	}
}
 

 

透明式的

/*
 * 抽象构件角色
 */
public interface Component {
	void sampleOperation();

	Composite getComposite();

	void add(Component c);

	void remove(Component c);

	Enumeration components();
}


/*
 * 树枝构件角色
 */
public class Composite implements Component {
	private Vector componentVector = new java.util.Vector();

	public Composite getComposite() {
		return this;
	}

	public void sampleOperation() {
		Enumeration e = components();
		while (e.hasMoreElements()) {
			((Component) e.nextElement()).sampleOperation();
		}
	}

	public void add(Component c) {
		componentVector.addElement(c);
	}

	public void remove(Component c) {
		componentVector.removeElement(c);
	}

	public Enumeration components() {
		return componentVector.elements();
	}
}


/*
 * 树叶构件角色
 */
public class Leaf implements Component {
	public void sampleOperation() {
	}

	public Composite getComposite() {
		return null;
	}

	public void add(Component c) {
	}

	public void remove(Component c) {
	}

	public Enumeration components() {
		return null;
	}
}


/*
 * 测试类
 */
public class Test {

	public static void main(String[] args) {
		Composite c = new Composite();
		Leaf l = new Leaf();
		c.sampleOperation();
		l.sampleOperation();
		c.add(c);
		l.add(c);
	}
}

 

z

计算机组成原理(第三版)唐朔飞-第六章计算机的运算方法-课后习题(1-16) 阅读详情

相关推荐

BOSS直聘数据采集实战:八爪鱼工具高效爬取职位信息的完整指南

本文提供了一份使用八爪鱼采集器高效爬取BOSS直聘职位信息的完整实战指南。针对非技术用户,详细讲解了从软件安装、网址规律分析到流程配置、数据导出的每一步操作,并分享了提升采集稳定性的高级设置与避坑技巧,帮助用户轻松实现数据采集自动化。

weixin_29061509的博客 1475

java 结构模式_[JAVA设计模式]第三部分:结构模式

结构模式结构模式描述如何将类或者对象结合在一起形成更大的结构。可以分为类的结构模式与对象的结构模式两种。类的结构模式:使用继承来把类、接口组合在一起,以形成更大的结构。典型例子是适配器模式。对象的结构模式:描述怎样把各种不同的类型的对象组合在一起,以实现新的功能的方法。对象结构模式是动态的。典型例子有合成模式、装饰模式、对象适配器模式。适配(Adapter)器模式把一个类的接口变的成客户端所期待的...

weixin_30456153的博客 231

S-function入门及案例详解(1)——S-function基础介绍及基本案例

本专题将用三篇文章对S-function进行介绍及其案例详解。欢迎关注~ 目录一、S-Function简介二、详解sfuntmpl函数2.1 sfuntmpl函数介绍2.2 mdlInitializeSizes函数2.3 mdlDerivatives函数2.4 mdlUpdate函数2.5 mdlOutputs函数2.6 mdlGetTimeOfNextVarHit函数2.7 mdlTerminate函数三、案例1——对波形的幅值进行放大3.1 案例分析3.2 案例详解3.3 输出波形四、案例2——对波形的

Wendy的博客 7万+

合成模式Composite(透明式的合成模式)

private String name; public Role(String role, String name) { this.role = role; this.name = name; } public String getInfo() { return this.role + " " + this.name; } public abstract void addRole(Role role); pub

2万+

拆解英飞凌CoolGaN:如何用Silvaco TCAD仿真评估功率GaN HEMT的关键性能(BV、Qg、开关损耗)

本文详细解析了如何使用Silvaco TCAD仿真工具评估英飞凌CoolGaN功率GaN HEMT的关键性能指标,包括击穿电压(BV)、栅电荷(Qg)和开关损耗。通过精确建模极化效应、优化边缘终端结构以及高频开关损耗仿真技术,为功率器件工程师提供了一套完整的'设计-仿真-验证'方法论,助力GaN HEMT在快充、数据中心电源等领域的应用。

weixin_29159995的博客 429

Qwen3-Embedding选型指南:0.6B/4B/8B三版本性能对比与场景匹配建议

本文深入解析阿里开源的Qwen3-Embedding系列模型(0.6B/4B/8B)的性能差异与适用场景,提供从边缘计算到云端部署的实战选型建议。通过实测数据对比响应延迟、内存占用和多语言精度等核心指标,帮助技术团队根据业务需求选择最优模型版本,并分享边缘设备优化与云端成本测算策略。

qsc901234567的博客 892

合成模式Composite(安全式的合成模式)

public Role(String role, String name) { this.role = role; this.name = name; } public String getInfo() { return this.role + " " + this.name; } } import java.util.Vector; /** * 树枝构件角色 * @author InJavaWeTrust

2万+

【uniapp踩坑记】App Store上传失败:Invalid Swift Support错误怎么解决?

作为一个前端出身的开发者,用 uniapp 开发原生 App 已经够挑战了,打包 iOS 上传 App Store 更是处处暗雷。这次的坑虽然小,但确实容易忽略。如果你也遇到了类似的报错,希望这篇文章能帮你少踩一次坑!

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1143

合成(Composite)模式

一、 合成(Composite)模式 合成模式有时又叫做部分-整体模式(Part-Whole)。合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式可以使客户端将单纯元素与复合元素同等看待。   二、 合成模式概述 下图所示的类图省略了各个角色的细节。   可以看出,上面的类图结构涉及到三个角色:     抽象构件(Component)角色:这是一个抽象角色,

houpei8404的专栏 867

STM32开发 -- LIS3DH三轴加速度计开发详解

这次要讲一下LIS3DH三轴加速度计的开发使用,之前是有讲过 MPU6050开发 的,但当时是在Linux下做的。额,还是个半成品,哈哈。现在手边有STM32的开发板,可以实实在在的来实现以下卡尔曼滤波了。 一、LIS3DH初识 依照惯例,先看一下手册,大致先了解一下,LIS3DH是什么模块。 下载:LIS3DH datasheet 1、描述 LIS3DH是一款超低功耗高性能三轴线性加速度计,属于...

不积跬步,无以至千里 2万+

20-CUDA规约算法:并行求和优化策略-✨

本文介绍了GPU上高效并行规约(Reduction)算法的优化技巧。规约是将大量数据合并为单个值的基础计算模式,广泛应用于科学计算等领域。文章从基础并行规约实现出发,逐步讲解了三种关键优化策略:1)交错寻址减少共享内存bank冲突;2)循环展开降低分支预测开销;3)多级规约处理大规模数据。性能对比显示,优化策略可带来最高4.5倍的加速效果。最后总结了最佳实践,包括合理使用共享内存、循环展开和warp级优化等技巧。这些优化方法可显著提升GPU计算密集型应用的性能。

2301_79143213的博客 172

设计模式——合成模式(Composite)

一、功能 合成模式有时又叫做部分-整体模式(Part-Whole)。合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式可以使客户端将单纯元素与复合元素同等看待。 从和尚的故事谈起 这是小时候我奶奶讲的故事:从前有个山,山里有个庙,庙里有个老和尚在给小和尚讲故事,讲的什么故事呢?从前有个山,山里有个庙……。奶奶的故事要循环多少次,根据你多长时间睡着而定。在故事中有山、有庙、有

晴天的专栏 2800

UG NX二次开发(C#)-VS2022配置NX二次开发模板不能正常显示的问题

随着VS2022的发布,使用VS2022进行UG NX二次开发的人员也会越来越多,但是由于VS2022和以前的VS版本采用代码结构不同,而UG NX的二次开发编程模板还没有适应于VS2022的模板配置,所以不能正常的创建一个完整的工程。本文采用曲线救国的方式来实现VS2022下的UG NX二次开发。如果有读者能很好的解决模板配置,不吝赐教。

GimiGimmy 4277

合成模式(Composite) Java实现

合成模式 合成模式(Composite)的定义 合成模式属于对象的结构模式,有时又叫做“部分-整体”模式。合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式可以使客户端将单纯元素与复合元素同等看待。 理解合成模式 合成模式把部分和整体的关系用树结构表示出来。合成模式使得客户端把一个个单独的成分对象和由它们复合而成的合成对象同等看待。 比如,一个文件系统就是一个典型的合成模式系统。...

CmdSmith的博客 1504

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

合成模式(Composite Pattern)

对象的树结构一个树结构由两种节点组成:树枝节点和树叶节点。树枝节点可以有子节点,而一个树叶节点不可以有子节点。除了根节点外,其它节点有且只有一个父节点。注意:一个树枝节点可以不带任何叶子,但是它因为有带叶子的能力,因此仍然是树枝节点,而不会成为叶节点。一个树叶节点永远不可能带有子节点。二、 合成模式概述下图所示的类图省略了各个角色的细节。 可以看出,上面的类图结构涉及到三个

diandian82的专栏 1028

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

voctomix合成模式深度指南:全屏、画中画、并排预览4种内置布局,自定义composite语法全解

voctomix 是一款用 Python 编写的 Full-HD 软件视频混合器(Live-Video-Mixer),它的核心概念之一就是**合成模式(composite)**:决定摄像头 A、B 两路画面如何排布在 1080p 输出帧中。本指南带你快速掌握 voctomix 的 4 种内置布局——全屏、画中画、左右等分并排、左右预览并排,并全解自定义 `composite` 配置的语法,让你几分

gitblog_00089的博客 944

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

合成(Composite)模式

  合成(composite)模式属于对象的结构模式,有时又叫部分-整体模式。合成模式将对象组织到数结构中,可以用来描述整体与部分的关系。 文件系统   一个文件系统就是一个典型的合成模式系统。下图所示就是常见的PC文件系统的一部分。   文件系统是一个树结构,树上长有节点。树的节点有两种,一种是树枝节点,即目录,有内部树结构;一种是树叶节点,即文件。   显然,可以把目录和...

weixin_30512043的博客 194

设计模式——Composite(组合/合成)模式

文章目录前言合成模式书面用语大白话构造一个场景场景描述场景探究合成模式给出的解决方案为公司、部门、员工提供一个抽象类代码外观模式 适用场景 前言 合成模式又被叫做组成模式 合成模式 书面用语 合成模式的意图是为了保证客户端调用单对象与组合对象的一致性 大白话 合成模式简化描述就是,为具有树形特征(A包含B,B包含C,C包含D)的对象集合提供一种抽象,使得调用该对象集合与调用该对象集合中的...

༺ bestcxx的专栏 ༻ 2480

Java设计模式——合成模式(Composite)

合成模式的意图是保证客户端调用单对象与组合对象的一致性 Component是抽象类,可以当做接口。 为何Composit类维持包含了Component对象的集合,而不是仅包含叶子对象 设计合成类用于维护合成对象的集合,使得合成对象既可以支持叶子对象又能支持组合对象。换言之,合成模式的设计使得我们能够将一种分组建模为另一种分组的集合。 例如: 我们可以将用户系统权限定义为特定权限的集合或

路漫漫,水迢迢 1366

设计模式学习笔记--合成(Composite)模式

合成(Composite)模式,有时又叫做部分-整体(Part-Whole)模式。合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式可以使客户端将单纯元素与复合元素同等看待。合成模式的典型应用是分类树,权限树等场景。

Java之旅 2297

设计模式 —— Composite 模式

设计模式之组合模式分析。组合模式示例、适用场景。

一步一步往上爬 2266

Composite 模式

Composite 模式 能够使容器与内容具有一致性,创造出递归结构的模式就是Composite模式。 示例程序类图 示例程序 Entry public abstract class Entry { public abstract String getName(); // 获取名字 public abstract int...

stepMore的博客 3174

Java与模式学习笔记 —— 合成(Composite)模式

合成模型模式属于对象的结构模式,又称作部分-整体(Part-Whole)模式。合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式可以使客户端将单纯元素与复合元素同等看待。 一、树结构和合成模式分类 树结构的类图 可以使用类图描述一个树结构的静态结构。下图所示的是合成模式的简略类图,同时也是一个典型的树结构的类图。 可以看出,最上方出现的是一个抽象的节点,左下方的是一个树叶节点,而右下方出现的是一个树枝节点,它含有其他的节点。 合成模式的实现根据所实现接口的区别分为两种形式,分别成为安全式

通信侠的博客 639

设计模式:组合模式(Composite)

设计模式:组合模式(Composite)

ProgramNovice的博客 1196

Android开发-设计模式-合成模式(Composite)

合成模式属于对象的结构模式,有时又叫做部分-整体(Part-Whole)模式。合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式可以使客户端将单纯元素与复合元素同等看待。

City_Coder的博客 497

什么是合成模式(Composite)?

意图 保证客户端调用单对象与组合对象的一致性。适用:具有相同功能的树形母子机构。 类图 实例 public interface Component { void sayHello(); void sayHelloHello(); void sayManyHello(); } class Leaf implements Component{ private String name; public Leaf(String name){ this.n.

我的博客 1182
上一篇: 5 适配器(Adapter)模式
下一篇: 7 装饰(Decorator)模式
O2AtomLife
博客等级 码龄19年 2粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值