操作型模式

[b]Template Method(模板)模式[/b]

[b]State(状态)模式[/b]
意图在于将与状态有关的处理逻辑分散到代表对象状态的各个类中。
[i]封装变化[/i]
[img]http://dl.iteye.com/upload/attachment/551540/727f852b-5d88-395d-88e4-d554b7d5696e.png[/img]

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());
}
}
}


[i]使用enum类型[/i]

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());
}
}


[b]Strategy(策略)模式[/b]
意图在于把可选的策略或方案封装在不同的类中,并在这些类中实现一个共同的操作。

[b]Command(命令)模式[/b]
意图是把请求封装在对象中。

[b]Interpreter(解析器)模式[/b]
意图是可以按照自己定义的组合规则集合来组合可执行对象。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值