《设计模式》实战---状态模式(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");
}
}
个人感觉不要为了学习设计模式而学习设计模式!只有真正用到解决实际问题才能领悟到其带来的好处!为了便于大家实验验证,附件提供了本文程序源代码。
分享到:
相关推荐
这个“design-pattern-master”库提供了宝贵的实战案例,对学习和巩固设计模式的理解具有极大的价值。开发者可以通过阅读源码,了解不同设计模式的实现细节,并结合自己的项目实践,不断提升编程技巧和设计能力。
本资源集合涵盖了Java的23种经典设计模式,结合实际项目实战,为开发者提供了深入理解和应用设计模式的机会。 首先,我们要理解设计原则,这是设计模式的基础。主要有以下几点: 1. **单一职责原则**(Single ...
《Unity设计模式实战详解》 Unity引擎是一款广泛应用于游戏开发的跨平台开发工具,而设计模式则是软件工程中解决常见问题的最佳实践。本资料“Unity-Design-Pattern-master.zip”聚焦于将设计模式应用于Unity游戏...
### 设计模式概览 #### 一、设计模式的重要性及挑战 设计模式是软件工程领域的一个重要概念,尤其是在面向对象编程(OOP)中扮演着关键角色。正如标题“China-Pub版-设计模式”所强调的,这本书为高级读者提供了一种...
- **状态模式**(State Pattern):允许一个对象在其内部状态改变时改变它的行为。 - **访问者模式**(Visitor Pattern):表示一个作用于某对象结构中的各元素的操作。 ### 实战应用 在实际项目开发中,选择合适...
- **状态模式**(State Pattern):允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。 - **责任链模式**(Chain of Responsibility Pattern):使多个对象都有机会处理请求,从而避免...
设计模式之 State(状态) 状态是编程中经常碰到的实例,将状态对象化,设立状态变换器,便可在状态中轻松切换. 设计模式之 Memento(注释状态?) 很简单一个模式,就是在内存中保留原来数据的拷贝. 设计模式之 ...
综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...
《Swift 4.2 设计模式实战教程 2nd Edition》是针对iOS开发者的深入学习设计模式的资源,其中包含了多个关键的设计模式实现。通过这个压缩包中的代码示例,我们可以深入了解并应用以下设计模式: 1. **单例模式 ...
设计模式是软件工程中的一种最佳实践,用于解决在软件设计中常见的问题,它们代表了经过时间考验的解决方案,可以被重用并应用于类似的问题。在Java编程语言中,设计模式的应用广泛且至关重要,有助于提高代码的...
Android源码设计模式解析与实战读书笔记源代码 说明: 包名factorypattern.normal表示的是工厂方法模式的普通用法 包名factorypattern.practices表示的是工厂方法模式的常用 包名observerpattern表示的是观察者模式...
9. **状态模式(State Pattern)**: 在Spring的一些组件中,如TransactionStatus,状态模式用于表示事务的不同状态,并根据状态执行不同的操作。 10. **职责链模式(Chain of Responsibility Pattern)**: Spring ...
综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...
如策略模式(Strategy Pattern)、模板方法模式(Template Method Pattern)、命令模式(Command Pattern)、责任链模式(Chain of ...Pattern)、状态模式(State Pattern)和观察者模式(Observer Pattern)...
(3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/abstractfactory //11.2抽象...
综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...
综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...
(3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/abstractfactory //11.2抽象...