Template Method(模板)模式
State(状态)模式
意图在于将与状态有关的处理逻辑分散到代表对象状态的各个类中。
封装变化
public interface State {
void push(PaintBoard paintBoard);
void pull(PaintBoard paintBoard);
String name();
}
public class PaintBoard {
private State state = new RedState();
//other methods and fields…
public void setState(State state) {
this.state = state;
}
public String getCurrentColor() {
return state.name();
}
public void push() {
state.push(this);
}
public void pull() {
state.pull(this);
}
}
public class GreenState implements State {
@Override
public void push(PaintBoard paintBoard) {
paintBoard.setState(new BlueState());
}
@Override
public void pull(PaintBoard paintBoard) {
paintBoard.setState(new RedState());
}
@Override
public String name() {
return "GREEN";
}
}
public class RedState implements State {
@Override
public void push(PaintBoard paintBoard) {
paintBoard.setState(new GreenState());
}
@Override
public void pull(PaintBoard paintBoard) {
paintBoard.setState(new BlueState());
}
@Override
public String name() {
return "RED";
}
}
public class BlueState implements State {
@Override
public void push(PaintBoard paintBoard) {
paintBoard.setState(new RedState());
}
@Override
public void pull(PaintBoard paintBoard) {
paintBoard.setState(new GreenState());
}
@Override
public String name() {
return "BLUE";
}
}
public class PaintBoardTestDrive {
public static void main(String[] args) {
PaintBoardTestDrive test = new PaintBoardTestDrive();
PaintBoard paintBoard = new PaintBoard();
System.out.println("Push Test:");
System.out.println("Paint board current color:" + paintBoard.getCurrentColor());
test.pushTest(paintBoard);
System.out.println("\nPull Test:");
System.out.println("Paint board current color:" + paintBoard.getCurrentColor());
test.pullTest(paintBoard);
}
public void pushTest(PaintBoard paintBoard) {
for (int i = 0; i < 3; i++) {
System.out.printf("%s ---push---> ", paintBoard.getCurrentColor());
paintBoard.push();
System.out.println(paintBoard.getCurrentColor());
}
}
public void pullTest(PaintBoard paintBoard) {
for (int i = 0; i < 3; i++) {
System.out.printf("%s ---pull---> ", paintBoard.getCurrentColor());
paintBoard.pull();
System.out.println(paintBoard.getCurrentColor());
}
}
}
使用enum类型
public interface State {
void push(PaintBoard paintBoard);
void pull(PaintBoard paintBoard);
String name();
}
public class PaintBoard {
private State state = Color.RED;
public void setState(State state) {
this.state = state;
}
public String getCurrentColor() {
return state.name();
}
public void push() {
state.push(this);
}
public void pull() {
state.pull(this);
}
}
public enum Color implements State {
RED {
@Override
public void push(PaintBoard paintBoard) {
paintBoard.setState(GREEN);
}
@Override
public void pull(PaintBoard paintBoard) {
paintBoard.setState(BLUE);
}
},
GREEN {
@Override
public void push(PaintBoard paintBoard) {
paintBoard.setState(BLUE);
}
@Override
public void pull(PaintBoard paintBoard) {
paintBoard.setState(RED);
}
},
BLUE {
@Override
public void push(PaintBoard paintBoard) {
paintBoard.setState(RED);
}
@Override
public void pull(PaintBoard paintBoard) {
paintBoard.setState(GREEN);
}
};
@Override
public void push(PaintBoard paintBoard) {
throw new UnsupportedOperationException("Invalid push!");
}
@Override
public void pull(PaintBoard paintBoard) {
throw new UnsupportedOperationException("Invalid pull!");
}
}
public class PaintBoardTestDrive {
public static void main(String[] args) {
PaintBoard paintBoard = new PaintBoard();
System.out.println("Push Test:");
System.out.println("Paint board current color:" + paintBoard.getCurrentColor());
for (int i = 0; i < 3; i++) {
pushTest(paintBoard);
}
System.out.println("\nPull Test:");
System.out.println("Paint board current color:" + paintBoard.getCurrentColor());
for (int i = 0; i < 3; i++) {
pullTest(paintBoard);
}
}
private static void pushTest(PaintBoard paintBoard) {
System.out.printf("%s ---push---> ", paintBoard.getCurrentColor());
paintBoard.push();
System.out.println(paintBoard.getCurrentColor());
}
private static void pullTest(PaintBoard paintBoard) {
System.out.printf("%s ---pull---> ", paintBoard.getCurrentColor());
paintBoard.pull();
System.out.println(paintBoard.getCurrentColor());
}
}
Strategy(策略)模式
意图在于把可选的策略或方案封装在不同的类中,并在这些类中实现一个共同的操作。
Command(命令)模式
意图是把请求封装在对象中。
Interpreter(解析器)模式
意图是可以按照自己定义的组合规则集合来组合可执行对象。

- 大小: 84.1 KB
分享到:
相关推荐
第20章 操作型模式介绍 176 第21章 模板方法(template method)模式 182 第22章 状态(state)模式 193 第23章 策略(strategy)模式 204 第24章 命令(command)模式 213 第25章 解释器(interpreter)模式 221 第26章 扩展...
设计模式分为三大类:创建型模式、结构型模式和行为型模式。 **创建型模式**关注的是对象的创建。共有五种创建型模式: 1. **工厂方法模式**:它定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法...
【设计模式之创建型模式实验】 创建型设计模式主要关注对象的创建,它们提供了一种在不指定具体类的情况下创建对象的方式,增强了系统的灵活性和可扩展性。在本实验中,我们将探讨五种常见的创建型设计模式:简单...
创建型模式是指在软件设计中,如何创建对象的模式。它主要解决了对象创建的问题,包括简单工厂、工厂方法、抽象工厂、单例、构造者和原型等六种模式。 1. 简单工厂模式:该模式提供了一种封装对象实例化的方式,...
在众多设计模式中,结构型模式关注如何组织类和对象,以形成更复杂的结构,同时保持良好的设计和代码可维护性。以下是关于“设计模式之结构型模式”的详细解析。 1. **适配器模式**: 适配器模式是一种结构型设计...
3、某手机操作系统可以根据用户不同的喜好在多种主题之间进行切换,随着主题的变化,系统中的字体、app图标、壁纸、锁屏壁纸等元素会随之发生变化。 (1)请使用抽象工厂模式设计手机主题库 (2)为系统增加一种新的...
今天我们要探讨的是“Java设计模式之结构型模式”。结构型模式主要关注如何组织类和对象,以达到良好的架构,提升代码的可读性和可维护性。在这个主题中,我们将深入理解并讨论这些模式的原理、应用场景及其实现。 ...
其中,行为型模式主要着眼于对象间的交互,以及如何有效地分配和管理职责,使软件设计更加灵活、易于扩展和维护。本文将详细介绍行为型设计模式,并深入分析两种典型的行为模式:职责链模式和命令模式。 首先,让...
包含三个实验,建造者模式(假设生产计算机只需要CPU、内存、显卡、显示器和光驱),抽象工厂模式(某手机操作系统可以根据用户不同的喜好在多种主题之间进行切换,随着主题的变化,系统中的字体、app图标、壁纸、...
虽然不是严格意义上的创建型模式,但组合模式与创建型模式密切相关,因为它允许我们构建树形结构的对象。它将简单对象和组合对象以一致的方式处理,使客户端代码可以透明地操作单个元素或整个对象结构。 以上创建...
某手机操作系统可以根据用户不同的喜好在多种主题之间进行切换,随着主题的变化,系统中的字体﹑app图标﹑壁纸﹑锁屏壁纸等元素会随之发生变化。 (1):请使用抽象工厂模式设计系统。 (2):为系统增加一种新的...
《23种设计模式——结构型模式解析》 设计模式是软件工程中的一种最佳实践,它们是解决常见问题的经验总结,被广泛应用于软件设计中,以提高代码的可读性、可维护性和复用性。在众多的设计模式中,结构型模式尤其...
c++设计模式-行为型模式-访问者模式;qt工程;c++简单源码; 访问者(Visitor)模式的定义:将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新...
状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。在C#编程中,这种模式被广泛应用于处理具有多种状态的对象,使得对象的状态转换更加清晰和易于管理。 状态模式的...
操作型问题是数学教育中一种重要的题型,它旨在考察学生的实践操作能力、空间观念以及问题解决技巧。这类问题通常涉及到作图、图形分割与组合、图形折叠和移动等多个方面,要求学生不仅要有扎实的几何基础知识,还要...
在Java中,设计模式分为三大类:创建型、结构型和行为型模式。本篇主要聚焦于创建型模式,这是一种用来处理对象创建的技术,通过封装、抽象和多态来提供更灵活的实例化过程。 创建型模式包括五种主要类型:单例...
这个“新版设计模式手册”深入浅出地介绍了设计模式的三大类:创建型模式、结构型模式和行为模式,为开发者提供了一套详细的设计说明。 一、创建型模式 创建型模式主要关注对象的创建过程,它们的目标是使得对象的...