设计模式总结(三):行为型模式
【摘要】 @TOC行为型模式 1.观察者模式一句话:各大语言的监听模式算是观察者模式吧,注册监听事件属于“借钱要债的名单注册”,触发事件属于“还钱操作”。public class ObserverPattern{ public static void main(String[] args){ debit zhangSan = new ZhangSan(); zhangSan....
@TOC
行为型模式
1.观察者模式
一句话:各大语言的监听模式算是观察者模式吧,注册监听事件属于“借钱要债的名单注册”,触发事件属于“还钱操作”。
public class ObserverPattern{
public static void main(String[] args){
debit zhangSan = new ZhangSan();
zhangSan.borrow(new Wangwu());
zhangSan.borrow(new ZhaoSI);
//张三判断自己状态改变,自己有钱了,
zhangSan.notifyCredits();
}
}
interface Debit{
void borrow(Credit credit);
void notifyCredits();
}
class ZhangSan implementd debit{
private List<Credit>allCredits = new ArrayList<>();
private Integer state = 0;//1表示有钱
public void borrow(Credit credit){
allCredits.add(credit);
}
public void notifyCredits(){
allCredits.forEach(credit -> credit.takeMoney());
}
}
}
interface Credit{
void takMoney();
}
class Wangwuimplementd Credit{
void takMoney(){
sout(还钱了)
}
}
class ZhaoSi implementd Credit{
void takMoney(){
sout(还钱了)
}
}
Debit:主体对象,负责调用和通知
Credit:观察者
2.状态模式
/**
* 抽象状态类
* @author gh
*
*/public abstract class State {
public abstract void Handle(Context context);
}
public class ConcreteStateA extends State{
@Override
public void Handle(Context context) {
context.setState(new ConcreteStateB()); //设置A的下一个状态是B
}
}
class ConcreteStateB extends State{
@Override
public void Handle(Context context) {
context.setState(new ConcreteStateA()); //设置B的下一个状态是A
}
}
/**
* 定义当前的状态
* @author gh
*
*/public class Context {
State state;
public Context(State state) { //定义Context的初始状态
super();
this.state = state;
}
public State getState() {
return state;
}
public void setState(State state) {
this.state = state;
System.out.println("当前状态为"+state);
}
public void request(){
state.Handle(this); //对请求做处理并且指向下一个状态
}}
3. 策略模式
类图和状态一样,但是不同的是:
状态模式是通过状态转移来改变 Context 所组合的 State 对象,而策略模式是通过 Context 本身的决策来改变组合的 Strategy 对象。所谓的状态转移,是指 Context 在运行过程中由于一些条件发生改变而使得 State 对象发生改变,注意必须要是在运行过程中。
public interface QuackBehavior {
void quack();}
public class Quack implements QuackBehavior {
@Override
public void quack() {
System.out.println("quack!");
}}
public class Squeak implements QuackBehavior{
@Override
public void quack() {
System.out.println("squeak!");
}}
public class Duck {
private QuackBehavior quackBehavior;
public void performQuack() {
if (quackBehavior != null) {
quackBehavior.quack();
}
}
public void setQuackBehavior(QuackBehavior quackBehavior) {
this.quackBehavior = quackBehavior;
}}
public class Client {
public static void main(String[] args) {
Duck duck = new Duck();
duck.setQuackBehavior(new Squeak());
duck.performQuack();
duck.setQuackBehavior(new Quack());
duck.performQuack();
}}
squeak!
quack!
4. 责任链模式
5. 模板方法设计模式
6. 命令设计模式
命令模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。
每一个命令都是一个操作:请求的一方发出请求要求执行一个操作;接收的一方收到请求,并执行操作。命令模式允许请求的一方和接收的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收,以及操作是否被执行、何时被执行,以及是怎么被执行的。MVC模式
1.接受者角色类
public class Receiver {
/**
* 真正执行命令相应的操作
*/
public void action(){
System.out.println("执行操作");
}
}
2. 抽象命令角色类
public interface Command {
/**
* 执行方法
*/
void execute();
}
3. 具体命令角色类
public class ConcreteCommand implements Command {
//持有相应的接收者对象
private Receiver receiver = null;
/**
* 构造方法
*/
public ConcreteCommand(Receiver receiver){
this.receiver = receiver;
}
@Override
public void execute() {
//通常会转调接收者对象的相应方法,让接收者来真正执行功能
receiver.action();
}
}
4. 请求者角色类
public class Invoker {
/**
* 持有命令对象
*/
private Command command = null;
/**
* 构造方法
*/
public Invoker(Command command){
this.command = command;
}
/**
* 行动方法
*/
public void action(){
command.execute();
}
}
5. 客户端角色类
public class Client {
public static void main(String[] args) {
//创建接收者
Receiver receiver = new Receiver();
//创建命令对象,设定它的接收者
Command command = new ConcreteCommand(receiver);
//创建请求者,把命令对象设置进去
Invoker invoker = new Invoker(command);
//执行方法
invoker.action();
}
}
7.备忘录模式
8.迭代器模式
9.中介者模式
10.访问者模式
符合开闭原则.
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)