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

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

     开篇前言

遇一人白首,择一城终老,是多么美好的人生境界,她和他历经风雨慢慢变老,回首走过的点点滴滴,依然清楚的记得当初爱情萌芽的模样,时维十一月,眼看着光棍节就那么轻轻的来了,没有预告,没有准备`(*∩_∩*)′,是否想在双十一摆脱单身,和亲爱的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淡雅如风,你笑魇如花......

目录
相关文章
|
10月前
|
设计模式 缓存 安全
代码的艺术:如何用设计模式打造优雅的Java应用
【4月更文挑战第7天】本文介绍了提升Java代码质量的七个设计模式:单例(Singleton)、工厂方法、抽象工厂、建造者、原型、适配器和观察者模式。这些模式分别用于资源管理、对象创建、接口兼容和消息传递等场景,旨在增强代码的灵活性、可读性和可维护性。掌握并适时应用设计模式,能帮助开发者打造高效、优雅的软件作品。
78 0
|
10月前
|
设计模式 存储 算法
二十三种设计模式全面解析-前言
二十三种设计模式全面解析-前言
|
设计模式 JSON Java
设计模式下篇
设计模式下篇
53 0
|
10月前
|
设计模式 安全 Java
【初学者慎入】Spring源码中的16种设计模式实现
以上是威哥给大家整理了16种常见的设计模式在 Spring 源码中的运用,学习 Spring 源码成为了 Java 程序员的标配,你还知道Spring 中哪些源码中运用了设计模式,欢迎留言与威哥交流。
481 3
|
设计模式
设计模式系列教程(完) - 终章总结
设计模式系列教程(完) - 终章总结
42 0
|
设计模式 Java API
听说有人用一个坦克大战项目把23种设计模式讲完了?(附源码)
长期以来给大家分享的都是技术和文档的一些内容,大家应该已经看腻了。今天给大家分享一波java的坦克大战项目和23种设计模式视频吧,让大家来实践一下,希望大家能够喜欢!
|
设计模式 算法 关系型数据库
设计模式 | 开篇简介
模式是在特定环境下人们解决某类重复出现问题的一套成功或有效的解决方案。
126 1
设计模式 | 开篇简介
|
设计模式 消息中间件 Java
【Java设计模式 前言】我为什么要学习设计模式
【Java设计模式 前言】我为什么要学习设计模式
136 0
|
设计模式 存储 缓存
常见的设计模式要会
《架构基础》
125 0
|
设计模式 消息中间件 算法
面试题(二十五)设计模式
1. 设计模式 1.1 说一说设计模式的六大原则 参考答案 单一职责原则 一个类,应当只有一个引起它变化的原因;即一个类应该只有一个职责。 就一个类而言,应该只专注于做一件事和仅有一个引起变化的原因,这就是所谓的单一职责原则。该原则提出了对对象职责的一种理想期望,对象不应该承担太多职责,正如人不应该一心分为二用。唯有专注,才能保证对象的高内聚;唯有单一,才能保证对象的细粒度。对象的高内聚与细粒度有利于对象的重用。一个庞大的对象承担了太多的职责,当客户端需要该对象的某一个职责时,就不得不将所有的职责都包含进来,从而造成冗余代码。 里氏替换原则 在面向对象的语言中,继承是必不可少的、优秀的语言机制
125 0