设计模式中的撩妹神技--下篇

     开篇前言

遇一人白首,择一城终老,是多么美好的人生境界,她和他历经风雨慢慢变老,回首走过的点点滴滴,依然清楚的记得当初爱情萌芽的模样,时维十一月,眼看着光棍节就那么轻轻的来了,没有预告,没有准备`(*∩_∩*)′,是否想在双十一摆脱单身,和亲爱的ta牵手漫步,在寒风中紧紧相拥,都说艺术来源于生活,却高于生活,作为人类智慧的结晶设计模式,她蕴藏着丰富的撩妹技术,今天这篇博文,小编主要介绍状态模式中的撩妹神技。

       什么是状态模式

当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类,状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况,把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化,一句话来说就是,当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类,我们来看一下状态模式的结构图,如下所示:


状态模式中的撩妹神技

新建项目State,新建类和类MM、Boy,编写相关的代码部分,如下所示:

package com.dp.state;

public class MM {
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	

}
Boy的代码如下所示:

package com.dp.state;

public class Boy {
	
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
}
小伙伴们都知道MM的状态是非常不固定的,恰似六月的天,像娃娃的脸,说变就变,MM是个易变得动物,前一个月还海誓山盟,后一个月擦肩而过,形同陌路,作为MM来讲,她会有一些方法,会哭、会笑、会说,编写代码,如下所示:
package com.dp.state;

public class MM {
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	

	public void smile(){
		
	}
	
	public void cry(){
		
	}
	
	public void say(){
		
	}
}
MM在不同状态的时候,这些方法的实现是不相同的,状态决定方法该如何执行。这个时候我们就可以疯传一个state,新建类MMState,代码如下所示:
package com.dp.state;

public abstract class MMState {
	public abstract void smile();
	public abstract void cry();
	public abstract void say();
}
MMState这个类有一些具体的子类,比如haapy的状态,如下所示:

package com.dp.state;

public class MMHappyState extends MMState {

	@Override
	public void smile() {
		// TODO Auto-generated method stub

	}

	@Override
	public void cry() {
		// TODO Auto-generated method stub

	}

	@Override
	public void say() {
		// TODO Auto-generated method stub

	}

}
MM还可以有unHappy的状态,编写代码如下所示:

package com.dp.state;

public class MMUnHappyState extends MMState {

	@Override
	public void smile() {
		// TODO Auto-generated method stub

	}

	@Override
	public void cry() {
		// TODO Auto-generated method stub

	}

	@Override
	public void say() {
		// TODO Auto-generated method stub

	}

}
这个时候MM的代码就可以这样来编写,如下所示:

package com.dp.state;

public class MM {
	private String name;
	
	private MMState state = new MMHappyState();

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	

	public void smile(){
		state.smile();
	}
	
	public void cry(){
		state.cry();
	}
	
	public void say(){
		state.say();
	}
}
这就是State模式,设计模式的区别往往是在语义上,而不是在语法上,接着我们来看一下状态模式的优缺点。

状态模式的优缺点

优点:

a、封装了转换规则。

b、枚举可能的状态,在枚举状态之前需要确定状态种类。 

c、将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为。 

d、允许状态转换逻辑与状态对象合成一体,而不是某一个巨大的条件语句块。 

e、 可以让多个环境对象共享一个状态对象,从而减少系统中对象的个数。
缺点:

a、状态模式的使用必然会增加系统类和对象的个数。 

b、状态模式的结构与实现都较为复杂,如果使用不当将导致程序结构和代码的混乱。 

c、状态模式对“开闭原则”的支持并不太好,对于可以切换状态的状态模式,增加新的状态类需要修改那些负责状态转换的源代码,否则无法切换到新增状态;而且修改某个状态类的行为也需修改对应类的源代码。
    状态模式的应用场景

a、当一个对象状态转换的条件表达式过于复杂时可以使用状态者模式。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简单化。
b、当一个对象行为取决于它的状态,并且它需要在运行时刻根据状态改变它的行为时,就可以考虑使用状态者模式。

小编寄语:该博文小编主要介绍了设计模式中的撩妹神技之状态模式,小编从什么是状态模式、状态模式的结构图,撩妹的Demo,状态模式的优缺点以及状态模式的优缺点,不知道单身的你,有没有从小编的系列博客中受到启发呢,双十一在即,单身的你,还在等什么,赶紧行动吧`(*∩_∩*)′,或许就在你读完小编博文的时候,你和ta在转角的咖啡屋不期而遇,面对眼前的这个人,ta淡雅如风,你笑魇如花......

©️2020 CSDN 皮肤主题: 代码科技 设计师: Amelia_0503 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值