`

《设计模式》实战---状态模式(State Pattern)

 
阅读更多
《设计模式》实战---状态模式(State Pattern)


状态模式是比较简单的设计模式之一,是一种很好的复用代码的方式(代码复用的方式:继承和组合,在继承关系确定的情况下,如果想动态改变对象的状态,就只能使用组合)。

状态模式就是通过组合来达到动态更改对象状态的目的。直接上代码,下面主要是person和person state两个接口以及对应的实现。

package com.yan.mode;

public interface Person {
	
	void changeState();
	void run();
}


package com.yan.mode;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class PersonImpl implements Person {

	private PersonState state = new Sleep();
	
	private Random random = new Random(100);
	private List<PersonState> stateList;
	PersonImpl(){
		if (null == stateList) 
			stateList = new ArrayList<PersonState>();
		
		stateList.add(new Sleep());
		stateList.add(new Study());
		stateList.add(new Work());
	}
	
	@Override
	public void changeState() {
		PersonState old = state;
		while(old == state)
			state = stateList.get(random.nextInt(stateList.size()));
		System.out.println("===state has been changed====");
	}

	@Override
	public void run() {
		state.run();

	}
	public static void main(String[] args) {
		Person person = new PersonImpl();
		person.run();
		for (int i = 0; i < 10; i++) {
			person.changeState();
			person.run();
		}
	}
}

package com.yan.mode;

public interface PersonState {

	void run();//接口中方法自动为public static
	
}

package com.yan.mode;

public class Sleep implements PersonState {

	@Override
	public void run() {
		System.out.println("I am sleeping");
	}

}

package com.yan.mode;

public class Study implements PersonState{

	@Override
	public void run() {
		System.out.println("I am studying");
		
	}

}

package com.yan.mode;

public class Work implements PersonState {

	@Override
	public void run() {
		System.out.println("I am working");
	}

}



个人感觉不要为了学习设计模式而学习设计模式!只有真正用到解决实际问题才能领悟到其带来的好处!为了便于大家实验验证,附件提供了本文程序源代码。
分享到:
评论

相关推荐

    设计模式java源码-design-pattern:java设计模式源代码

    这个“design-pattern-master”库提供了宝贵的实战案例,对学习和巩固设计模式的理解具有极大的价值。开发者可以通过阅读源码,了解不同设计模式的实现细节,并结合自己的项目实践,不断提升编程技巧和设计能力。

    设计原则与模式,java23种设计模式项目实战pdf文档视频资源.rar

    本资源集合涵盖了Java的23种经典设计模式,结合实际项目实战,为开发者提供了深入理解和应用设计模式的机会。 首先,我们要理解设计原则,这是设计模式的基础。主要有以下几点: 1. **单一职责原则**(Single ...

    Unity-Design-Pattern-master.zip.zip

    《Unity设计模式实战详解》 Unity引擎是一款广泛应用于游戏开发的跨平台开发工具,而设计模式则是软件工程中解决常见问题的最佳实践。本资料“Unity-Design-Pattern-master.zip”聚焦于将设计模式应用于Unity游戏...

    china-pub版-设计模式

    ### 设计模式概览 #### 一、设计模式的重要性及挑战 设计模式是软件工程领域的一个重要概念,尤其是在面向对象编程(OOP)中扮演着关键角色。正如标题“China-Pub版-设计模式”所强调的,这本书为高级读者提供了一种...

    C++设计模式课件26_设计模式总结.pdf

    - **状态模式**(State Pattern):允许一个对象在其内部状态改变时改变它的行为。 - **访问者模式**(Visitor Pattern):表示一个作用于某对象结构中的各元素的操作。 ### 实战应用 在实际项目开发中,选择合适...

    设计模式(中文版的设计模式)

    - **状态模式**(State Pattern):允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。 - **责任链模式**(Chain of Responsibility Pattern):使多个对象都有机会处理请求,从而避免...

    二十三种设计模式【PDF版】

    设计模式之 State(状态) 状态是编程中经常碰到的实例,将状态对象化,设立状态变换器,便可在状态中轻松切换. 设计模式之 Memento(注释状态?) 很简单一个模式,就是在内存中保留原来数据的拷贝. 设计模式之 ...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷6

    综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...

    Design Patterns by Tutorials in Swift 4.2, 2nd Edition_code

    《Swift 4.2 设计模式实战教程 2nd Edition》是针对iOS开发者的深入学习设计模式的资源,其中包含了多个关键的设计模式实现。通过这个压缩包中的代码示例,我们可以深入了解并应用以下设计模式: 1. **单例模式 ...

    23中设计模式详解

    设计模式是软件工程中的一种最佳实践,用于解决在软件设计中常见的问题,它们代表了经过时间考验的解决方案,可以被重用并应用于类似的问题。在Java编程语言中,设计模式的应用广泛且至关重要,有助于提高代码的...

    java源码解读-DesignPattern:Android源码设计模式解析与实战读书笔记源代码

    Android源码设计模式解析与实战读书笔记源代码 说明: 包名factorypattern.normal表示的是工厂方法模式的普通用法 包名factorypattern.practices表示的是工厂方法模式的常用 包名observerpattern表示的是观察者模式...

    86丨开源实战四(下):总结Spring框架用到的11种设计模式1

    9. **状态模式(State Pattern)**: 在Spring的一些组件中,如TransactionStatus,状态模式用于表示事务的不同状态,并根据状态执行不同的操作。 10. **职责链模式(Chain of Responsibility Pattern)**: Spring ...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷8

    综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...

    Java与模式(清晰书签版)

    如策略模式(Strategy Pattern)、模板方法模式(Template Method Pattern)、命令模式(Command Pattern)、责任链模式(Chain of ...Pattern)、状态模式(State Pattern)和观察者模式(Observer Pattern)...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷3

    (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/abstractfactory //11.2抽象...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷10

    综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷5

    综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷1

    (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/abstractfactory //11.2抽象...

Global site tag (gtag.js) - Google Analytics