【设计模式】状态模式、责任链模式、迭代器模式、解释器模式

golang设计模式——行为模式 行为模式主要关注对象之间的通信 阅读详情

1、状态模式

简介

事物在不同的状态下会产生不同的动作,也会从一个状态转换到另一个状态。

当状态数目不多时可以用switch/case解决,但是当状态数目很多时维护很大一组switch/case将变得困难。

将状态逻辑和动作实现分离,而不是直接将状态的代码写在动作逻辑中,以便更好的进行扩展和维护。

优点:

  • 封装了转换规则。
  • 枚举可能的状态,在枚举状态之前需要确定状态种类。
  • 将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为。
  • 允许状态转换逻辑与状态对象合成一体,而不是某一个巨大的条件语句块。
  • 可以让多个环境对象共享一个状态对象,从而减少系统中对象的个数。

角色

  • 一个抽象的状态类,提供统一的接口
  • 若干个具体的状态,根据自己代表的状态重写父类的接口,拥有一个活动类的指针
  • 一个活动类,拥有所有的具体状态的指针,和一个当前状态的指针,拥有和状态类对应的操作接口,在调用操作接口时调用当前状态的操作接口

代码实现

模拟机器状态变化的过程。假设一个机器有三种状态,分别是正常、出错、维修中,我定义了这三种状态,活动类中有一个m_count计数器,假设这是机器的可靠指数,每次运行时消耗可靠指数,当可靠指数小于0时进入出错状态,出错状态不能运行,需要进行维修,然后进入维修状态,在维修状态运行时会再次出错,需要再次维修,则可靠指数加2,进入正常状态。

#include<iostream>
using namespace std;

class State{
public:
	virtual void ErrorHappened()=0;
	virtual bool Fix()=0;
	virtual bool Run()=0;
	virtual void show()=0;
};

class Activity;

class Normal : public State{
public:
	Normal(Activity * activity);
	void ErrorHappened();
	bool Fix();
	bool Run();
	void show();
private:
	Activity *m_activity;
};

class Error:public State{
public:	
	Error(Activity * activity);
	void ErrorHappened();
	bool Fix();
	bool Run();
	void show();

private:
	Activity *m_activity;
};

class Fixing:public State{
public:
	Fixing(Activity * activity);
	void ErrorHappened();
	bool Fix();
	bool Run();
	void show();
private:
	Activity *m_activity;
};


class Activity{
public:
	State* getState() const{
		return m_state;
	}
	void SetState(State* const state){
		m_state=state;
	}
	int getCount(){
		return m_count--;
	}
	void setCount(const int count){
		m_count=count;
	}
	State* getNormal() const{
		return m_normal;
	}
	void setNormal(State* const normal){
		m_normal=normal;
	}
	State* getError() const{
		return m_error;
	}
	void setError(State* const error){
		m_error=error;
	}
	State* getFixing()const{
		return m_fixing; 
	}
	Activity(int count){
		m_count=count;
		m_error=new Error(this);
		m_normal=new Normal(this);
		m_fixing=new Fixing(this);
		m_state=getNormal();

	}
	void ErrorHappened(){
		m_state->ErrorHappened();
	}
	void Fix(){
		m_count+=2;
		m_state->Fix();
	}
	void Run(){
		if(m_count>0)
			m_count--;
		if(m_count<=0){
			cout<<"Low avialibality "<<endl;
			m_state->ErrorHappened();
			return;
		}
		m_state->Run();

	}
	void show(){
		m_state->show();
	}
private:
	State* m_state;
	int m_count;
	State* m_error;
	State* m_fixing;
	State* m_normal;
};

Normal::Normal(Activity * activity){
	m_activity=activity;
}
void Normal::ErrorHappened(){
	m_activity->SetState(m_activity->getError());
}
bool Normal::Fix(){
	cout<<"No need to fix"<<endl;
	return false;
}
bool Normal::Run(){
	cout<<"Run successfully"<<endl;
	return true;
}
void Normal::show(){
	cout<<"Normal"<<endl;
}

Error::Error(Activity * activity){
	m_activity=activity;
}
void Error::ErrorHappened(){
	cout<<"Already Error"<<endl;
}
bool Error::Fix(){
	m_activity->SetState(m_activity->getFixing());
	return true;
}
bool Error::Run(){
	cout<<"Can't run"<<endl;
	return false;
}
void Error::show(){
	cout<<"Error"<<endl;
}

Fixing::Fixing(Activity* activity){
	m_activity=activity;
}
void Fixing::ErrorHappened(){
	m_activity->SetState(m_activity->getError());
}
bool Fixing::Fix(){
	m_activity->SetState(m_activity->getNormal());
	return true;
}
bool Fixing::Run(){
	cout<<"Can't run"<<endl;
	return false;
}
void Fixing::show(){
	cout<<"Fixing"<<endl;
}


int main(){
	Activity* ac=new Activity(1);
	for(int i=0;;i++){
		 cout<<"time: "<<i<<" state:";
		 ac->show();
		 cout<<endl;
		 cout<<"Input 1.Run   2.Fix  "<<endl;
		 int j=0;
		 cin>>j;
		 if(j==1){
		 	ac->Run();
		 }else if(j==2){
		 	ac->Fix();
		 }else{
		 	cout<<"Wrong operation"<<endl;
		 }

	}
	return 0;
}




2、责任链模式

简介

责任链模式为请求创建了一个接收者对象的链。每个接受者都含有另一个接收者的引用,如果一个接收者不能处理他的请求,就会把这个请求发送给他的下一个接受者了,以此类推。

客户只需要将请求发送到责任链上就可以了,不必关心请求处理的细节和请求的传递过程,实现了请求的发送者和请求的处理者解耦。

优点:

  • 将请求和处理分开,实现解耦,提高系统的灵活性
  • 简化了对象,使对象不需要知道链的结构
  • 调试不方便。采用了类似递归的方式,调试时逻辑可能比较复杂
  • 最佳应用场景:有多个对象可以处理同一个请求时,比如:多级请求、请假/加薪等审批流程、Java Web中Tomcat对Encoding的处理、拦截器

请添加图片描述

角色

  • 一个请求类,包含了请求的各种信息
  • 一个抽象的请求接收者类,拥有一个其他接收者的引用,一个处理请求的接口
  • 若干个不同类型的具体的请求接收者类,重写处理请求的接口

代码实现

模拟公司采购审批的过程。先定义一个采购请求类,包含了采购的金额,再定义一系列有顺序的审批员R1R2R3R4,按照各自的审批金额限制处理采购请求,如前一个不能审批,则传递给下一个审批员。

#include<iostream>
using namespace std;

class Purchase{
public:
	int getType()const{
		return type;
	}
	float getPrice()const{
		return price;
	}
	int getId()const{
		return id;
	}
	Purchase(const int type,const float price,const int id):
	type(type),price(price),id(id){}
private:
	int type;
	float price=0.f;
	int id=0;
};

class Approver{
public:
	void setApprover(Approver* approval){
		this->approval=approval;
	}
	explicit Approver(const string& name):name(name){
	}
	virtual void processRequest(Purchase* purchase)=0;
	string name;
	Approver* approval;
};

class R1:public Approver{
public:
	explicit R1(const string name):Approver(name){}
	void processRequest(Purchase* purchase){
		if(purchase->getPrice()<=5000){
			cout<<"id: "<<purchase->getId()<<
			" are dealed by "<<this->name<<" rank R1"<<endl;
		}else{
			approval->processRequest(purchase);
		}
	}
};

class R2:public Approver{
public:
	explicit R2(const string name):Approver(name){}
	void processRequest(Purchase* purchase){
		if(purchase->getPrice()>5000&&purchase->getPrice()<10000){
			cout<<"id: "<<purchase->getId()<<
			" are dealed by "<<this->name<<" rank R2"<<endl;
		}else{
			approval->processRequest(purchase);
		}
	}
};

class R3:public Approver{
public:
	explicit R3(const string name):Approver(name){}
	void processRequest(Purchase* purchase){
		if(purchase->getPrice()<=10000&&purchase->getPrice()<50000){
			cout<<"id: "<<purchase->getId()<<
			" are dealed by "<<this->name<<" rank R3"<<endl;
		}else{
			approval->processRequest(purchase);
		}
	}
};

class R4:public Approver{
public:
	explicit R4(const string name):Approver(name){}
	void processRequest(Purchase* purchase){
		
		cout<<"id: "<<purchase->getId()<<
		" are dealed by "<<this->name<<" rank R4"<<endl;
		
	}
};

int main(){
	Purchase * p=new Purchase(1,100000,1);
	Approver* r1=new R1("jack");
	Approver* r2=new R2("bob");
	Approver* r3=new R3("dask");
	Approver* r4=new R4("ammb");
	r1->setApprover(r2);
	r2->setApprover(r3);
	r3->setApprover(r4);
	r1->processRequest(p);
	return 0;

}



3、迭代器模式

简介

迭代器模式提供一种遍历集合中所有对象的统一的方式,不需要知道集合对象的底层表示,即不暴露其内部结构。

角色

  • 一个抽象的迭代器类,提供返回第一个、返回下一个、返回当前元素、是否遍历完毕等接口。
  • 一个具体的迭代器类,拥有一个某种数据结构的指针和该数据结构的元素个数。
  • 一个抽象的数据结构类,声明了增加、删除元素、创建迭代器、返回数量等接口。
  • 一个具体的数据结构类,封装原始的数据结构,拥有一个对应的迭代器指针。

代码实现

介绍同上,在需要遍历数据结构的元素时使用该封装过的数据结构里的迭代器进行遍历。

#include<iostream>
#include<string>
#include<vector>

using namespace std;

class Iterator{
public:
	Iterator(){}
	virtual ~Iterator(){}
	virtual string First()=0;
	virtual string Next()=0;
	virtual string Current()=0;
	virtual bool IsDone()=0;
};

class Aggregate{
public:
	virtual int Count()=0;
	virtual void Push(const string& strValue)=0;
	virtual string Pop(const int nIndex)=0;
	virtual Iterator* CreateIterator()=0;
};

class ConcreteIterator:public Iterator{
public:
	ConcreteIterator(Aggregate* paggregate):m_Aggregate(paggregate),m_nCurrent(0),Iterator(){
		
	}
	string First(){
		return m_Aggregate->Pop(0);
	}
	string Next(){
		string strret;
		m_nCurrent++;
		if(m_nCurrent<m_Aggregate->Count()){
			strret=m_Aggregate->Pop(m_nCurrent);
		}
		return strret;
	}
	string Current(){
		return m_Aggregate->Pop(m_nCurrent);
	}

	bool IsDone(){
		return ((m_nCurrent>=m_Aggregate->Count())?true:false);
	}

private:
	Aggregate* m_Aggregate;
	int m_nCurrent;
};

class ConcreteAggregate:public Aggregate{
public:
	ConcreteAggregate():m_pIterator(NULL){
		m_vecItem.clear();
	}
	~ConcreteAggregate(){
		if(m_pIterator !=NULL){
			delete m_pIterator;
			m_pIterator = NULL;
		}
	}
	Iterator* CreateIterator(){
		if(m_pIterator ==NULL){
			m_pIterator=new ConcreteIterator(this);
		}
		return m_pIterator;
	}
	int Count(){
		return m_vecItem.size();
	}
	void Push(const string& strval){
		m_vecItem.push_back(strval);
	}
	string Pop(const int nIndex){
		string strret="";
		if(nIndex<Count()){
			strret=m_vecItem[nIndex];
		}
		return strret;
	}
private:
	vector<string> m_vecItem;
	Iterator* m_pIterator;
};

int main(){
	ConcreteAggregate *pName=NULL;
	pName=new ConcreteAggregate();
	if(pName!=NULL){
		pName->Push("hello");
		pName->Push("world");
		pName->Push("good");
	}
	Iterator* iter=NULL;
	iter=pName->CreateIterator();
	if(iter!=NULL){
		string stritem=iter->First();
		while(!iter->IsDone()){
			cout<<iter->Current()<<endl;
			iter->Next();
		}
	}
	return 0;
}

4、解释器模式

介绍

解释器模式是指给定一个语言(表达式),定义它的文法的一种表示,并定义一个解释器,使用该解释器来解释语言中的句子(表达式)。

应用场景:
1、应用可以将一个需要解释执行的语言中的句子表示为一个抽象语法树
2、一些重复出现的问题可以用一种简单的语言来表达
3、一个简单语法需要解释的场景
4、这样的例子还有,比如编译器、运算表达式计算、正则表达式、机器人等。

优点:

可扩展性比较好,灵活。
增加了新的解释表达式的方式。
易于实现简单文法。

缺点:

可利用场景比较少。
对于复杂的文法比较难维护。
解释器模式会引起类膨胀。
解释器模式采用递归调用方法。

角色

  • 一个封装内容的类,拥有一份未解释的内容和一份解释过的内容,以及对它们的获取和设置操作。
  • 一个抽象的表达式的类,声明一个对内容进行解释的功能。
  • 若干个不同的具体的表达式类,每种具体的表达式类都代表一种解释方法,重写相对应的解释操作。

代码实现

模拟加密解密过程。内容类中包含一个原始数字和一个解释后的数字,两种解释操作分别是将原始数字加一和将原始数字减一(假设这分别代表加密和解密)。

#include<iostream>
#include<string>

using namespace std;

class Context{
public:
	Context(int num):m_num(num){
	}

	void setNum(int num){
		m_num=num;
	}
	int getNum(){
		return m_num;
	}	
	void setRes(int res){
		m_res=res;
	}
	int getRes(){
		return m_res;
	}

private:
	int m_num;
	int m_res;
};


class Expression{
public:
	virtual void interpreter(Context* context)=0;
};

class PlusExpression:public Expression{
public:
	virtual void interpreter(Context* context){
		int num=context->getNum();
		num++;
		context->setNum(num);
		context->setRes(num);
	}
};

class MinusExpression:public Expression{
public:
	virtual void interpreter(Context* context){
		int num=context->getNum();
		num--;
		context->setNum(num);
		context->setRes(num);
	}
};

int main(){
	Context* pcxt=new Context(10);
	Expression* e1=new PlusExpression();
	e1->interpreter(pcxt);

	cout<<"plusExpression: "<<pcxt->getRes()<<endl;

	Expression* e2=new MinusExpression();
	e2->interpreter(pcxt);
	cout<<"MinusExpression: "<<pcxt->getRes()<<endl;
	return 0;
}


后记:设计模式的学习到此告一段落,谢谢观看。明天开启新的学习计划。

【从零开始学习计算机科学】设计模式(四)责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、空对象模式、策略模式、模板模式、访问者模式 模板方法模式是一种行为型设计模式,它定义了一个操作中的算法的骨架,而将一些步骤的实现延迟到子类中。责任链模式是一种行为型设计模式,它将请求的处理者链式地连接起来,允许多个对象有机会处理请求,从而避免了请求发送者与多个处理者之间的耦合。迭代器模式是一种行为型设计模式,它提供一种方法,顺序地访问一个聚合对象(如数组、集合等)中的元素,而无需暴露该对象的内部表示。备忘录模式是一种行为型设计模式,它允许在不暴露对象实现细节的情况下,捕获和保存对象的内部状态,以便在以后恢复对象的状态。 阅读详情

相关推荐

JAVA设计模式之行为模式 责任链模式和状态模式

击鼓传花是一种热闹而又紧张的饮酒游戏。在酒宴上宾客依次坐定位置,由一人击鼓,击鼓的地方与传花的地方是分开的,以示公正。开始击鼓时,花束就开始依次传递,鼓声一落,如果花束在某人手中,则该人就得饮酒,这是很典型的行为责任链模式。 State模式主要解决的是在开发中时常遇到的根据不同的状态需要进行不同的处理操作的问题,而这样的问题,大部分人是采用switch-case语句进行处理的,这样会造成一个问题:分支过多,而且如果加入一个新的状态就需要对原来的代码进行编译。

设计模式第六讲:责任链模式和迭代器模式详解

(1). 定义:为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。PS:责任链模式也叫职责链模式。在责任链模式中,客户只需要将请求发送到责任链上即可,无须关心请求的处理细节和请求的传递过程,所以责任链将请求的发送者和请求的处理者解耦了。(2). 优点:A. 降低了对象之间的耦合度。

a410974689的博客 612

单片机多级菜单的简单实现

单片机多级菜单的简单实现 多级菜单的思路 最近想把stm32上的oled显示屏做的好看一些,于是动手写了写一个多级菜单,思路很简单,每个页面用单独的函数封装好,每个功能也是用单独的函数进行封装,用了3个按键,两个切换键,一个确定键。 首先来看看用啥判断页面的(这偷个懒,希望没人打我) //页面标志位 uint8_t s1 = 0; //主页面功能号 uint8_t s2 = 0; //主次页面判断标志位 uint16_t s3 = 1; //次页面功能号 主页面的显示函数,这是个很枯燥的一

qq_43940175的博客 7605

Java设计模式-状态模式

状态模式是一种优雅地管理对象状态的设计模式。它通过将对象的状态封装在独立的状态类中,实现了状态和行为的解耦,提高了代码的可维护性和可扩展性。状态模式与其他设计模式有着明显的区别,如策略模式和责任链模式。虽然状态模式有一些缺点,但在需要管理对象状态并根据状态改变行为的场景下,它是一种强大的工具。通过合理运用状态模式,我们可以使系统更加灵活和可维护,提升软件开发的质量和效率。

小薯条的博客 1019

【2021末九软工边缘人保研】川大-中科院网络中心-华师夏令营+哈工大本-中科院网络中心-西交-厦大-中山-武大-北航预推免

2021末九软工边缘人保研记录一、写在前面二、个人背景 一、写在前面 2020年计算机保研可谓是诸神黄昏,卷的头破血流(指我等菜鸡)。疫情的原因,今年的夏令营和预推免基本全部改为线上,机试取消,能不能拿到offer基本完全取决于背景以及面试表现(当然也有个别头铁非要机试,甚至笔试的学校)。大佬们offer收割不停,我等边缘人只能看着一封封拒信发呆。 这种情况下,只有985 Rank5%以及211 Rank2%之前的大佬能够较为轻松地拿到面试入场券。贴一个上交电院夏令营要求你们感受一下: 预推免相比起夏令营

weixin_43222706的博客 4235

流量特征工程实战:基于Python脚本的CIC-FlowMeter批量自动化处理

本文详细介绍了如何利用Python脚本对CIC-FlowMeter工具进行批量自动化封装,实现从海量PCAP文件中高效提取流量特征并生成CSV文件。通过构建健壮的自动化流水线,解决了手动处理效率低下、易出错的问题,并分享了并行处理、错误处理等关键优化技巧,助力网络流量分析与机器学习数据预处理工作。

c6d7e8f9g的博客 744

状态模式与责任链模式

文章目录一、状态模式 一、状态模式 状态模式定义:当一个对象的内在状态改变时允许其改变行为,这个对象看起来像是改变了其类。 状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时,把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的逻辑简化。 State抽象状态类: public abstract class State{ public abstract void handle(Context context); } Context类,维护了一个State类型的对象,这个

qq_38515961的博客 990

机器学习【学校智慧食堂及其应用】

本文主要介绍机器学习【智慧食堂及其应用】

qq_201729558 2571

责任链模式、状态模式

责任链模式 定义:为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条传递链,知道有对象处理它为止。 优缺点 优点: 降低了对象之间的耦合度。该模式使得一个对象无需知道是哪一个对象处理其请求以及链的结构,发送者和接收者也无需拥有对方明确的消息。 增强了系统的可扩展性。可以根据需要增加新的请求处理类,满足开闭原则; 增强了给对象指派职责的灵活性。当工作流程发生变化,可以动态地改变链内的成员或者调动他们的次序,也可以动

erose的博客 831

【YOLOv26 源码深度解析】第三章:YOLOv26特征融合(Neck)模块

路径聚合网络作为YOLOv26 Neck部分的核心组件,在继承特征金字塔网络(FPN)自顶向下语义传播能力的基础上,引入了自底向上的路径增强机制,构建起双向跨层特征融合体系。该架构通过建立多尺度特征间的双向信息流,有效缓解了深层网络中细节信息逐层衰减的问题,使得模型在保持高层语义理解能力的同时,能够精确定位不同尺度的目标实例。跨层深度监督的另一优势在于增强特征的尺度适应性。对于来自上层路径的特征与横向连接的特征,融合过程首先对各路特征进行加权,随后进行归一化处理,最终通过加法或拼接操作生成融合特征。

u012133341的博客 520

【车载以太网】ATU(Address Translation Unit / Address Table Unit)

【车载以太网】ATU(Address Translation Unit / Address Table Unit)

天赐好车的博客 152

设计模式GOF23之-----------行为型模式(责任链模式、迭代器模式、中介者模式、命令模式、解释器模式、访问者模式、模版方法模式、状态模式、观察者模式、备忘录模式)

一 责任链模式        任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。 责任链模式的结构   下面使用了一个责任链模式的最简单的实现。   责任链...

金州饿霸吃不饱的博客 871

工业级向量检索核心技术:IVF-PQ原理与全流程解析

在大规模高维向量检索场景中,IVF-PQ(倒排索引结合乘积量化)凭借“粗筛范围+细算距离”的双重加速策略,成为核心解决方案。本文将深入解析其原理与全流程,助力开发者掌握这一关键技术。

进一步有进一步的欢喜~ 1197

行为型设计模式

行为型设计模式 1、命令模式 2、责任链模式 3、模板方法模式 4、策略模式 5、迭代器模式 6、中介者模式 7、观察者模式 8、备忘录模式 9、解释器模式 10、状态模式 11、访问者模式

游海东的技术专栏 1527

RTDETR最强结构图 | 包含模型整体结构图 | 全模块展开图 | AiFi模块展开图

RT-DETR 最全结构图

Coding... 9598

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

行为类设计模式

行为类设计模式感觉是对于具体环境的具体分析,彼此关联没有之前的两组大:创建类模式基本都是将new和创建的的过程套类实现多样化的创建;结构类模式基本通过组合or继承的方式实现彼此的耦合,大部分是组合。   责任链模式 命令模式 解释器模式 Interpreter Pattern -- Given a language, define a representation for its gra

mingzidaodiduochang的专栏 812

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

设计模式(下篇:行为型)

下篇目录:3.行为型3.1 解释器模式3.2 迭代器模式3.3 中介者模式3.4 访问者模式3.5 观察者模式3.6 状态模式3.7 策略模式3.8 备忘录模式3.9 责任链模式3.10 命令模式3.11 模板方法模式 3.行为型 3.1 解释器模式 3.2 迭代器模式 循环依次执行 3.3 中介者模式 Q 和代理区别 3.4 访问者模式 3.5 观察者模式 3.6 状态模式 3.7 策略模式 简单工厂模式的升级版: 将 相同属性和功能的对象抽象集合起来 Strategy实现Context,具体

柚子的博客 460

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

软件开发设计模式之【11】个【行为型】设计模式

代码码云仓库地址:https://gitee.com/dzxmy/design_pattern 常用的行为型设计模式有:策略模式,责任链模式,模板方法模式,状态模式 不常用的行为型设计模式有:观察者模式,备忘录模式,迭代器模式,中介者模式,命令模式,访问者模式,解释器模式 一、模板方法模式 定义:定义了一个算法的骨架,并允许子类为一个或者多个步骤提供实现 模板方法使得子类可以不改变算法结...

小米吃辣椒的博客 1361

Java中的两种模式

中介者模式,顾名思义,就是之前两个对象完全没有联系,必须找一个共同的中介,才能完成信息的传递工作。模板模式比较有意思。这就好比,有一个统一的模板给你参考,每一个步骤也都是约定好的,但是具体每个步骤里面做什么是需要自己定义好的,不管是什么算法,对外的抽象接口都是一样的,这样对于输入数据而言,只需要在实际使用的时候,选择对应的算法,也就是对应的策略就可以了。行为模式一般认为有11种,分别是命令模式、解释器模式、迭代模式、中介模式、备忘录模式、观察者模式、责任链模式、状态模式、策略模式、模板模式和访问者模式。..

weixin_62421895的博客 444

设计模式学习-行为型模式

行为型模式包含以下种类: 策略模式、模板方法模式、状态模式、观察者模式、备忘录模式、中介者模式、命令模式、访问者模式、责任链模式、迭代器模式、解释器模式……学习中 1、策略模式(Strategy) 通过组合的方式实现策略,context环境类中保存一个策略类的指针,通过设计多个具体策略类来实现算法。 缺点:可能会导致具体的策略类过多。 2、模板方法模式(Template)...

jklhj123的博客 381

【学习笔记】软件设计模式(四)行为型模式

软件设计模式之行为型模式本人学习笔记。内容参考《Java设计模式》刘伟 教程配套PPT。仅供学习参考使用。 文章目录总述1.责任链模式概述结构优缺点2.模式概述结构优缺点.模式概述结构优缺点.模式概述结构优缺点.模式概述结构优缺点.模式概述结构优缺点.模式概述结构优缺点.模式概述结构优缺点.模式概述结构优缺点.模式概述结构优缺点.模式概述结构优缺点.模式概述结构优缺点.模式概述结构优缺点.模式概述...

阿J的博客 1230

Java设计模式(四)行为型 设计模式

设计模式(行为型) 前面我们已经学习了12种设计模式,分为两类: 创建型:关注对象创建 结构型:关注类和对象的结构组织 我们接着来看最后一种设计模式,也是最多的一种,行为型设计模式关注系统中对象之间的交互,研究系统在运行时对象之间的相互通信与协作,进一步明确对象的职责。 解释器模式 这种模式的使用场景较少,很少使用的一种设计模式,这里提一下就行。 解释器顾名思义,就是对我们的语言进行解释,根据不同的语义来做不同的事情,比如我们在SE中学习的双栈计算器,正是根据我们输入的算式,去进行解析,并根据不同的运.

qq_25928447的博客 1624

23例设计模式——行为型

1 Interpreter(解释器) 意图: 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 适用性: 当有一个语言需要解释执行,并且你可将该语言中的句子表示为一个抽象语法树时,可使用解释器模式。而当存在以下情况时该模式效果最好:该文法简单对于复杂的文法,文法的类层次变得庞大而无法管理。此时语法分析程序生成器这样的工具是...

m0_37713821的博客 248

【编程素质】设计模式-其它

1,迭代器模式1)概念提供一种方法顺序访问一个聚合对象的各个元素,而又不暴露其内部的表示。2)实现3)demopublic interface Iterator{ boolean hasNext(); Object next(); }public class DinerMenuIterator implements Iterator{ MenuItem[] items;

午后阳光 740

设计模式之行为型模式

行为型模式1. 责任链模式【本身处理不了的往下传递处理】2. 命令模式【打包模式】3. 解释器模式【依据规则解析】4. 迭代器模式【java中的迭代器原理】5. 中介者模式【通信交流】6.备忘录模式【保存模式】7. 观察者模式【一对多】8. 状态模式【A变B跟着变】9. 空对象模式10. 策略模式【将操作封装起来】11. 模板模式【模板】 1. 责任链模式【本身处理不了的往下传递处理】 为请求创建一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。在这种模式中,每个接收者都包含对

qq_42426993的博客 221
上一篇: 【设计模式】中介者模式、命令模式、访问者模式
下一篇: 【linux服务器编程学习】1、TCP/IP协议族
Sweler*19
博客等级 码龄7年 65粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值