[设计模式]状态模式 (State)

四轮两驱小车(四):STM32驱动5路灰度传感器PID循迹 之前买了一批5路灰度传感器,想用这传感器进行循迹,无奈网上和官方的资料提供的还是比较少,这里还是做一下当初的学习记录。 阅读详情

1.意图

       允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。

2.结构与参与者


3.适用性

       1)一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。

       2)一个操作中含有庞大的多分支的条件语句,并且这些分支依赖于该对象的状态。这个状态通常用一个或者多个枚举常量表示。通常,有多个操作包含这一相同的条件结构。State模式将每一个条件分支放入一个独立的类中。这使得你可以根据对象自身的情况将对象的状态作为一个对象,这个对象可以不依赖于其他对象而独立变化。

4.效果

       1)它将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。

       2)它使得状态转换显示化。

       3)State对象可被共享(见适用性2)。

5.代码示例

       一个银行账户的例子。

#include <iostream>
#include <string>

using namespace std;

//抽象状态类
class State
{
	
public:
	double m_amount;                          //这里写得非常丑陋
	virtual WithDraw(double amount)=0;
	virtual Diposit(double amount)=0;
};

//欠款状态
class RedState:public State
{
//private: StateChangeCheck()
public:
	RedState(double amount){m_amount=amount;}
	virtual WithDraw(double amount)
	{
		cout << "没有余额可以提现"<<endl;
	}
	virtual Diposit(double amount)
	{
		m_amount+=amount;
		cout << "您存入了:¥"<<amount<<endl; 
	}
};

//白银VIP
class SilverState:public State
{
public:
	SilverState(double amount){m_amount=amount;}
	virtual WithDraw(double amount)
	{
		m_amount-=amount;
		cout << "您取出了:¥"<<amount<<endl; 
	}
	virtual Diposit(double amount)
	{
		m_amount+=amount;
		cout << "您存入了:¥"<<amount<<endl; 
	}
};

//黄金VIP
class GoldState:public State
{
public:
	GoldState(double amount){m_amount=amount;}
	virtual WithDraw(double amount)
	{
		m_amount-=amount;
		cout << "您取出了:¥"<<amount<<endl; 
	}
	virtual Diposit(double amount)
	{
		m_amount+=amount;
		cout << "您存入了:¥"<<amount<<endl; 
	}
};

//Context类
class Account
{
private:
	State* m_pstate;
	string m_sowner;
	void StateChangeCheck()  
//不改变状态都要新建另外一个实例
//每次存取款的操作都将引起一个实例的构建,并且可能是多余的
//怎么改进???
	{
		if (m_pstate->m_amount<0)
		{
			m_pstate=new RedState(m_pstate->m_amount);
			cout << "小子,你欠款了,快还钱!!!"<<endl;
		}
		else if (m_pstate->m_amount>10000)
		{
			m_pstate=new GoldState(m_pstate->m_amount);
			cout << "您现在的身份是黄金VIP"<<endl;
		}
		else 
		{
			m_pstate=new SilverState(m_pstate->m_amount);
			cout << "您现在的身份是白银VIP"<<endl;
		}
	}
public:
	Account(string owner=""):m_sowner(owner)
	{
		m_pstate=new RedState(-10);
	}
	Account(State* state,string owner=""):m_sowner(owner),m_pstate(state){}
	void WithDraw(double amount)
	{
		m_pstate->WithDraw(amount);
		StateChangeCheck();
	}
	void Diposit(double amount)
	{
		m_pstate->Diposit(amount);
		StateChangeCheck();
	}
};
//客户端
int main()
{
	SilverState* sp=new SilverState(1000);
	Account* ap=new Account(sp,"sicofild");
	ap->Diposit(10000.00);
	ap->WithDraw(9000.00);
	ap->WithDraw(5000);
	ap->Diposit(100000.00);
	return 0;
}


智慧安防:基于Java+YOLOv8的视频AI识别平台设计与实现 张工,我们的园区智慧安防项目又出问题了!用Python写的YOLOv8 demo,拉3路RTSP流就卡,视频延迟超过5秒,入侵检测误报率太高,一到晚上光线差就全是误报,而且和我们的Java安防平台对接太麻烦,还要搭个消息队列,架构复杂得要死!“别慌,用Java+YOLOv8啊! 阅读详情

相关推荐

LLM and Embedding区别

LLM(大语言模型)和 Embedding(嵌入)是自然语言处理(NLP)中的两个核心概念,它们的核心区别在于。Embedding 计算向量。

u010674101的专栏 1874

设计模式24:State Pattern (状态模式)

英文原文:http://www.dofactory.com/Patterns/PatternState.aspx一、State Pattern (状态模式)Define: Allow an object to alter its behavior when its internal state changes. The object will appear to change its cl

薛敬明的专栏 1897

SAP面试全过程(已拿offer)

周五打电话给我说过了SAP第一轮面试,第二轮要在下周四北京,这几天终于体会到了什么叫做重压下的感觉,越复习越虚,看别人的面经都感觉卧槽这问题也巨难了吧...连去北京可以见妹子这种事情都感觉一点心情都没有。面前准备固然是要有的,但关键是平时就要有料,多想想自己做的项目。当作一个给自己的提醒吧!

cloudray8580的专栏 4万+

设计模式 -- 状态模式(State Pattern)

允许一个对象在内部状态改变时改变它的行为。 应用场景 一个对象的行为取决于它的状态,并且它在运行时根据状态改变它的行为。 代码中包含大量与对象状态相关的判断语句。 优点: 将不同的状态隔离 把各种状态的转换逻辑,分布到State的子类中,减少相互间依赖 增加新的状态非常简单 状态模式与责任链模式的区别 状态模式和责任链模式都能消除 if-else 分支过多的问题。但在某些情况下,状态模式中的状态可以理解为责任,那么在这种情况下,两种模式都可以使用。

魔法师之家 1792

TCN(Temporal Convolutional Networks)时序卷积网络详解及代码

TCN(Temporal Convolutional Networks)时序卷积网络详解及代码

zhulewen的博客 7883

用户行为路径可视化_桑葚图(Sankey)

桑基图对用户行为路径可视化的blog学习笔记。

徐思孟的博客 3855

C#设计模式读书笔记之状态模式(State Pattern)

状态模式(State pattern)【使用频率:★★★☆☆】 1.概述:允许一个对象在其内部状态改变时改变它的行为。 2.解决的问题:主要解决的是当控制一个对象状态转换的条件过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的逻辑判断简单化。 3.模式中的角色   3.1上下文环境(Context):在Context类中维护一个抽象状态类State的实例,这个...

qq826364410的专栏 528

MATLAB实战:Gardner定时同步算法实现与BER曲线优化指南

本文详细介绍了Gardner定时同步算法在MATLAB中的实现与优化方法,重点解析了算法原理、关键步骤实现及BER曲线绘制中的常见问题解决方案。通过优化参数设置和系统架构,提升数字通信系统的符号同步性能,为QPSK、QAM等调制系统提供实用参考。

weixin_29085865的博客 231

设计模式之状态模式(State Design Pattern)

状态模式,是11种行为型模式之一。一个生存在流程整个周期的对象,因事件触发改变对象的状态进而影响对象的行为(流程的走向)。状态模式就是把对象的行为与状态进行封装,通过改变状态进而影响行为。 状态模式几个关键对象类型: Context:一个生存在流程整个周期的对象 Event:触发改变对象的状态的事件(Event)或条件(Condition) State: 封装对象状态的抽象类(State)和具体实现类 本文以请假流程为例,如图: 请假流程有的主管、部门、人事部都有各自的职责,而且有先后依..

xjj1314的专栏 491

2025年GESP3月认证C++五级真题解析

小 A 有 2n 件物品,小 B 和小 C 想从小 A 手上买走这些物品。对于第 i 件物品,小 B 会以 bi 的价格购买,而小 C 会以 ci 的价格购买。对于所有测试点,保证 1 <= T <= 100, 2 <= g < p <= 10^9, g, p 为整数, p 为质数。对于所有测试点,保证 1 <= n <= 10^5, 0 <= bi, ci <= 10^9, bi, ci 为整数。对于另外 50 % 的测试点,保证 n <= 100000, 0 <= bi, ci <= 10^9。

lan_in的博客 1035

点云目标检测:open3d多窗口联动可视化

多个模型之间的对比除了指标之外,还需要可以直接直观的对比可视化结果,这次介绍一下如何使用open3d同时打开两个窗口分别加载两个模型的结果进行对比,同时实现两个窗口的联动,也就是当一个窗口拖动或者缩放时另外一个窗口也跟着做同样的变换。

zhaoguanhua的博客 4688

JAVA设计模式之 状态模式【State Pattern】

一、概述     当系统中某个对象存在多个状态,这些状态之间可以进行转换,而且对象在不同状态下行为不相同时可以使用状态模式。状态模式将一个对象的状态从该对象中分离出来,封装到专门的状态类中,使得对象状态可以灵活变化。状态模式是一种对象行为型模式。 二、适用场景     用于解决系统中复杂对象的多种状态转换以及不同状态下行为的封装问题。简单说就是处理对象的多种状态及其相互转换。

小吕丶Code阶区 3891

基于SAGE算法的宽带信道参数估计算法的MATLAB仿真

本文将介绍如何使用MATLAB进行SAGE算法的仿真,以便更好地理解和应用该算法。SAGE算法是一种基于最大期望(Expectation-Maximization)方法的迭代估计算法,用于估计未知的参数。在宽带信道参数估计中,SAGE算法通过迭代优化来估计信道的传输函数。总结起来,本文介绍了如何使用MATLAB进行基于SAGE算法的宽带信道参数提取算法的仿真。通过以上步骤,我们可以得到估计的信道响应,并与真实信道响应进行比较。此外,SAGE算法还可以与其他信道估计算法相结合,以提高估计的准确性和性能。

CodeRoarX的博客 1075

设计模式-状态模式-State Pattern

这种模式通过将状态相关的行为封装在独立的类中,并在运行时根据状态对象来切换这些行为,从而使得对象能够在内部状态变化时合理地更改其行为。状态模式的优点在于它将状态相关的行为封装在具体的状态类中,使得状态转换逻辑清晰,并且可以在运行时动态地改变对象的行为。状态模式的优点包括局部化了状态相关的操作,将状态转换逻辑封装在状态对象内部,以及可以在运行时切换对象的行为。:在没有使用状态模式的情况下,对象的状态管理可能需要大量的条件分支语句,状态模式可以将这些条件分支分散到不同的状态类中。

wesigj的博客 2030

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

设计模式-18状态模式State Pattern

状态模式是一种行为设计模式,允许对象在内部状态改变时改变其行为。当对象的行为取决于状态且需要避免大量条件判断时,该模式特别有用。其核心结构包括:上下文(Context)维护当前状态,状态接口(State)定义行为,具体状态类实现不同状态下的行为。典型应用场景如自动售货机,通过状态模式可清晰管理"无硬币"、"有硬币"、"售出"等状态转换,避免复杂的条件分支,使代码更易维护和扩展。

d3y1`5 81_09 964

深度学习工具包 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")

状态模式(State Design Pattern)

以此回顾《设计模式之禅》及其他设计模式书籍、视频中的状态模式。 什么是状态模式? Allow an object to alter its behavior when its internal state changes. The object will appear to change its class. (当一个对象的内在状态改变时,允许它修改自己的行为。这个对象看起来像是改变了类)

西西&&C的专栏 1427

设计模式:状态模式(State Pattern)

/** * 状态模式。 * @author Bright Lee */ public class StatePattern { public static void main(String[] args) { Context context = new Context(); context.request(); context.request(); } } cla...

look4liming的专栏 249

设计模式(Design pattern)之状态模式(state Pattern)

状态模式在电梯系统中的应用 该代码展示了状态模式在电梯控制系统中的实现。通过抽象StateElevator类定义四种操作(open/close/run/stop),并由四个具体状态类(Open/Run/Stop/Close)实现不同状态下的行为逻辑。Context类作为环境角色维护当前状态,各状态类可通过super.context改变状态。这种设计避免了大量条件判断,使状态转换清晰可见,但实际应用中可能存在状态类膨胀的问题。示例演示了电梯从开启状态开始,依次执行运行、开启、关闭和停止操作的状态转换过程。

RR1335 之代码才是动力源 220

【设计模式】——状态模式(State Pattern)

状态模式(State Pattern)是一种重要的行为型设计模式,它允许一个对象在其内部状态改变时改变其行为,使得对象看起来像是改变了它的类。状态模式通过将状态相关的行为封装在独立的状态类中,有效地简化了条件逻辑,提高了代码的可维护性和可扩展性。

J^T的博客 982

23种设计模式之状态模式(State Pattern)

本篇文章将23种设计模式中的状态模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。

小威的博客 1万+

设计模式-状态模式(State Pattern)

状态模式 定义 当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其类。 类型 行为型。 UML类图 角色 环境(Context)角色:环境角色含有状态角色的对象,并且可以处理一些请求,这些请求最终产生的响应会与状态相关。 状态(State)角色:状态角色定义了每一个状态的行为接口,这些行为将会在Context中得以使用。 具体状态(ConcreteState)角色:实现了相关行为...

kaven 1248

设计模式学习—状态模式(State Design Pattern)

设计模式之状态模式,一种行为型模式

闲鱼的博客 1034

Java设计模式——状态模式(STATE PATTERN)

Java设计模式——状态模式(STATE PATTERN) 转载:http://blog.youkuaiyun.com/u012401711/article/details/52675873

hackxiaoF的专栏 412

设计模式——状态模式(State Pattern)

状态模式(State Pattern)又称状态机模式,是允许对象在内部状态发生改变时改变他的的行为,类的行为由状态决定,不同的状态有着不同的行为,对象看起来好像修改了它的类。属于行为型模式。一般涉及到电商订单相关的,会采用状态模式来设计,不同的订单状态,响应的都有不同的操作。 适用场景 1) 行为随状态改变而改变的场景 2) 一个操作中含有庞大的多分支结构,并且这些分支取决于对象的状态状态抽象对象.........

Lucifer ZHAO 3747

23中设计模式C++实现(4)之状态模式(State Pattern)

简述: 状态模式又叫做有限状态机。适应场景:我们的对象有多种状态,单对象同一时刻只能保持某一种状态,并当内部变量或者内部变量变化时,我们的对象会在这些状态中变换。 UML结构图 Context(上下文):定义一个与 Client 交互的接口。它维护对 ConcreteState 对象的引用,可以用该对象来定义当前状态。 State(抽象状态):定义接口,来声明每个 ConcreteSt...

请叫我少爷的博客 296

秒懂设计模式之状态模式(State Pattern)

[版权申明] 非商业目的注明出处可自由转载 博文地址: 出自:shusheng007 设计模式汇总篇,一定要收藏: 永不磨灭的设计模式(有这一篇真够了,拒绝标题党) 概述 状态模式在日常开发中是一个非常实用的模式,可以将你的代码逼格迅速提升一个档次,所以让我们开始今天的卓越之旅吧。 类型 行为型(behavioral) 难度 3颗星 定义 当一个对象内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 定义对于初学者没啥用,因为字都认识却无法理解其中的含义。必须等学完了,回过头来看才能更加深.

ShuSheng007的程序人生 3088
上一篇: [设计模式]设计模式中的指导原则
下一篇: [设计模式]观察者模式(Observer)
sicofield
博客等级 码龄18年 169粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值