`

操作型模式

 
阅读更多
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
分享到:
评论

相关推荐

    [Java设计模式(第2版)(Design.Patterns.in.Java).John.Metsker

    第20章 操作型模式介绍 176 第21章 模板方法(template method)模式 182 第22章 状态(state)模式 193 第23章 策略(strategy)模式 204 第24章 命令(command)模式 213 第25章 解释器(interpreter)模式 221 第26章 扩展...

    23种设计模式,创建型模式共5种,结构型模式7种,行为型模式11种

    设计模式分为三大类:创建型模式、结构型模式和行为型模式。 **创建型模式**关注的是对象的创建。共有五种创建型模式: 1. **工厂方法模式**:它定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法...

    设计模式之创建型模式实验.docx

    【设计模式之创建型模式实验】 创建型设计模式主要关注对象的创建,它们提供了一种在不指定具体类的情况下创建对象的方式,增强了系统的灵活性和可扩展性。在本实验中,我们将探讨五种常见的创建型设计模式:简单...

    设计模式(创建型、结构型、行为型)

    创建型模式是指在软件设计中,如何创建对象的模式。它主要解决了对象创建的问题,包括简单工厂、工厂方法、抽象工厂、单例、构造者和原型等六种模式。 1. 简单工厂模式:该模式提供了一种封装对象实例化的方式,...

    设计模式之结构型模式

    在众多设计模式中,结构型模式关注如何组织类和对象,以形成更复杂的结构,同时保持良好的设计和代码可维护性。以下是关于“设计模式之结构型模式”的详细解析。 1. **适配器模式**: 适配器模式是一种结构型设计...

    软件设计模式实验1创建型模式源码

    3、某手机操作系统可以根据用户不同的喜好在多种主题之间进行切换,随着主题的变化,系统中的字体、app图标、壁纸、锁屏壁纸等元素会随之发生变化。 (1)请使用抽象工厂模式设计手机主题库 (2)为系统增加一种新的...

    Java设计模式之结构型模式源码以及文档

    今天我们要探讨的是“Java设计模式之结构型模式”。结构型模式主要关注如何组织类和对象,以达到良好的架构,提升代码的可读性和可维护性。在这个主题中,我们将深入理解并讨论这些模式的原理、应用场景及其实现。 ...

    设计模式3-行为型模式

    其中,行为型模式主要着眼于对象间的交互,以及如何有效地分配和管理职责,使软件设计更加灵活、易于扩展和维护。本文将详细介绍行为型设计模式,并深入分析两种典型的行为模式:职责链模式和命令模式。 首先,让...

    软件设计模式创建型模式实验代码

    包含三个实验,建造者模式(假设生产计算机只需要CPU、内存、显卡、显示器和光驱),抽象工厂模式(某手机操作系统可以根据用户不同的喜好在多种主题之间进行切换,随着主题的变化,系统中的字体、app图标、壁纸、...

    C#面向对象设计模式纵横谈-创建型模式

    虽然不是严格意义上的创建型模式,但组合模式与创建型模式密切相关,因为它允许我们构建树形结构的对象。它将简单对象和组合对象以一致的方式处理,使客户端代码可以透明地操作单个元素或整个对象结构。 以上创建...

    软件设计模式作业 创建型设计模式

    某手机操作系统可以根据用户不同的喜好在多种主题之间进行切换,随着主题的变化,系统中的字体﹑app图标﹑壁纸﹑锁屏壁纸等元素会随之发生变化。 (1):请使用抽象工厂模式设计系统。 (2):为系统增加一种新的...

    23种设计模式-结构型模式.docx

    《23种设计模式——结构型模式解析》 设计模式是软件工程中的一种最佳实践,它们是解决常见问题的经验总结,被广泛应用于软件设计中,以提高代码的可读性、可维护性和复用性。在众多的设计模式中,结构型模式尤其...

    c++设计模式-行为型模式-访问者模式

    c++设计模式-行为型模式-访问者模式;qt工程;c++简单源码; 访问者(Visitor)模式的定义:将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新...

    C#面向对象设计模式纵横谈(22):(行为型模式) State 状态模式

    状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。在C#编程中,这种模式被广泛应用于处理具有多种状态的对象,使得对象的状态转换更加清晰和易于管理。 状态模式的...

    操作型问题选.docx

    操作型问题是数学教育中一种重要的题型,它旨在考察学生的实践操作能力、空间观念以及问题解决技巧。这类问题通常涉及到作图、图形分割与组合、图形折叠和移动等多个方面,要求学生不仅要有扎实的几何基础知识,还要...

    Java设计模式之创建型模式源码以及文档

    在Java中,设计模式分为三大类:创建型、结构型和行为型模式。本篇主要聚焦于创建型模式,这是一种用来处理对象创建的技术,通过封装、抽象和多态来提供更灵活的实例化过程。 创建型模式包括五种主要类型:单例...

    新版设计模式手册 通俗的例子讲述设计的方法 1创建型模式 2结构型模式 3 行为模式 详细的设计说明

    这个“新版设计模式手册”深入浅出地介绍了设计模式的三大类:创建型模式、结构型模式和行为模式,为开发者提供了一套详细的设计说明。 一、创建型模式 创建型模式主要关注对象的创建过程,它们的目标是使得对象的...

Global site tag (gtag.js) - Google Analytics