大连外经贸网站,wordpress 短地址,电子企业网络推广方案,wordpress 仿知乎简介:
本文是个系列一次会出两个设计者模式作用#xff0c;如果有关联就三个#xff0c;除此外还会讲解在spring中作用。
23设计者模式以及重点模式
我们都知道设计者模式有3类23种设计模式#xff0c;标红是特别重要的设计者模式建议都会#xff0c;而且熟读于心#…简介:
本文是个系列一次会出两个设计者模式作用如果有关联就三个除此外还会讲解在spring中作用。
23设计者模式以及重点模式
我们都知道设计者模式有3类23种设计模式标红是特别重要的设计者模式建议都会而且熟读于心标蓝是指其次重要建议也要明白。
1创建型模式单例模式、抽象工厂模式、构建者模式、工厂模式、原型模式。
2结构型模式适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
3行为型模式访问者模式、模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式。 命令模式Command Pattern
命令模式是一种行为型设计模式它将请求或简单的操作封装成一个对象。这种模式的主要目的是将请求发送者与接收者解耦使得发送者和接收者不直接交互。命令模式允许将请求排队处理、记录请求日志以及实现可撤销的操作。
组成部分
命令接口Command定义执行操作的接口。具体命令ConcreteCommand实现命令接口的类定义了接收者和动作之间的绑定关系。接收者Receiver知道如何实施和执行一个请求相关的操作。调用者Invoker要求命令对象执行请求。客户端Client创建具体命令对象并设置其接收者。
命令模式 主要用于将操作的请求者和执行者解耦允许将请求封装成对象从而使用不同的请求、队列或日志参数化其他对象并支持可撤销的操作。
示例
// 命令接口
interface Command {void execute();
}// 接收者
class Light {public void turnOn() {System.out.println(The light is on);}public void turnOff() {System.out.println(The light is off);}
}// 具体命令
class TurnOnCommand implements Command {private Light light;public TurnOnCommand(Light light) {this.light light;}public void execute() {light.turnOn();}
}class TurnOffCommand implements Command {private Light light;public TurnOffCommand(Light light) {this.light light;}public void execute() {light.turnOff();}
}// 调用者
class RemoteControl {private Command command;public void setCommand(Command command) {this.command command;}public void pressButton() {command.execute();}
}// 客户端
public class CommandPatternDemo {public static void main(String[] args) {Light light new Light();Command turnOn new TurnOnCommand(light);Command turnOff new TurnOffCommand(light);RemoteControl control new RemoteControl();control.setCommand(turnOn);control.pressButton();control.setCommand(turnOff);control.pressButton();}
}在这个例子中Light 是一个接收者TurnOnCommand 和 TurnOffCommand 是具体命令它们实现了 Command 接口。RemoteControl 是调用者它通过 pressButton 方法来执行命令。客户端代码创建了命令对象并将其与接收者关联。 迭代器模式Iterator Pattern
迭代器模式是一种行为型设计模式它提供一种方法来顺序访问聚合对象中的各个元素而又无需暴露该对象的内部表示。
组成部分
迭代器接口Iterator定义访问和遍历元素的接口。具体迭代器ConcreteIterator实现迭代器接口负责管理当前元素的位置并能够计算出下一个元素。聚合接口Aggregate定义创建相应迭代器对象的接口。具体聚合ConcreteAggregate实现聚合接口返回一个具体迭代器的实例。
迭代器模式 用于顺序访问集合对象的元素而不需要暴露其底层表示提供了一种统一的方法来遍历各种类型的集合。
示例
import java.util.*;// 迭代器接口
interface Iterator {boolean hasNext();Object next();
}// 聚合接口
interface Container {Iterator getIterator();
}// 具体聚合
class NameRepository implements Container {public String names[] {John, Doe, Jane, Smith};Overridepublic Iterator getIterator() {return new NameIterator();}private class NameIterator implements Iterator {int index;Overridepublic boolean hasNext() {return index names.length;}Overridepublic Object next() {if (this.hasNext()) {return names[index];}return null;}}
}// 客户端
public class IteratorPatternDemo {public static void main(String[] args) {NameRepository namesRepository new NameRepository();for (Iterator iter namesRepository.getIterator(); iter.hasNext();) {String name (String) iter.next();System.out.println(Name : name);}}
}在这个示例中NameRepository 是一个具体聚合它实现了 Container 接口并内部定义了 NameIterator这是一个具体的迭代器实现。客户端通过 NameRepository 的 getIterator 方法获取迭代器并使用它来遍历名称。