空腹の場合は、飲み物にのどが渇いて、睡眠眠い、食べて、人生はあまりにも退屈です
1コマンドモード
1.1コンセプト
コンセプト:オブジェクトにカプセル化「要求」は、異なる要求を使用するためには、キューまたはログには、他のオブジェクトをパラメータ化。コマンドモードもアンドゥ操作をサポートしています。
ことでは現在、どのようにコマンドモードを理解するには、以下の具体的な例を挙げて!!
1.2 引例
レストランの食事に顧客事例のポイントを分析します。図1:
- お客様は、オーダーにハンバーガー、フライドポテトの袋を書き留めます。コール
createOrder()
シングルポイント次の食事を。 - ウェイター使用
takeOrder()
離れて、顧客の注文を埋めるための方法。 - ウェイターコール
orderUp()
通知シェフが製品を準備します。 - シェフが注文、見えたコンテンツ、通話を取得
makeHumburger()
し、makeFries()
コードの実装
//厨师类
public class Cook {
public Cook() {}
public void makeBurger() {
System.out.println("Making a burger");
}
public void makeFries() {
System.out.println("Making fries");
}
}
//顾客类
public class Customer {
Waitress waitress;
public Customer(Waitress waitress) {
this.waitress = waitress;
}
public void hungry(Order o) {
System.out.println("服务员点餐");
order();
waitress.takeOrder(o);
}
public void order() {
System.out.println("我要汉堡和薯条");
}
}
//服务员类
public class Waitress {
Order order;
public Waitress() {
}
public void takeOrder(Order order) {
this.order = order;
order.orderUp();
}
}
//订单接口
public interface Order {
public void orderUp();
}
//测试代码
public class Diner {
public static void main(String[] args) {
Cook cook = new Cook();
Waitress waitress = new Waitress();
Customer customer = new Customer(waitress);
Order o = () -> {
cook.makeBurger();
cook.makeFries();
};
customer.hungry(o);
}
}
1.3分析
オーダーを終了するために発生した、ウェイターがオーダーの実際の内容を知っている必要はありません、ウェイターの仕事は、お客様の手の手から順番に調理することです。この例では、著者(顧客)と離れて依頼者(シェフ)の実装を要求します。これは、コマンド・モードのアイデアです。
図2:
-
コマンドオブジェクト(コマンド)を作成するために、クライアント(クライアント)、コマンドオブジェクトを実行するアクションの受信機(レシーバー)のセットが含まれています。
-
Commandオブジェクトを提供して
execute()
受信者をカプセル化する方法は、操作を行う必要があります。受信者のこれらのアクションを呼び出しますこれらのメソッドを呼び出します。 -
クライアントコール発信者の(インボーカ)
setCommand()
、およびメソッドに渡されたコマンドオブジェクト。 -
呼び出し側は、コマンドオブジェクトの呼び出し、
execute()
メソッドを。 -
これらのアクションの実装の最終受信者
1.4コマンド・モード図クラス
- コマンドは、インターフェイスとして定義され、呼び出し
execute()
操作の関連する方法は、受信者を行います。 Invoker
コマンドオブジェクトを保持および特定の時間にコマンドオブジェクトのポイントを呼び出すexecute()
要求を達成するために、。- クライアントの作成を担当
ConcreteCommand
し、その受信者を設定します。
)
実施例1.5の改善プライマー
図中の(1)。
- クック
makeBurger()
とmakeFries()
に抽象化Command
2つの実装形成Command
インターフェイスクラスを:CookMakeBurgerCommand
とCookMakeFriesCommand
。 waitress
抽象化Invoker
。ことでtakeOrder()
メソッド呼び出しCommand
インタフェースexecute()
のメソッド。
(2)コード
public interface Order {
public void execute();
}
public class CookMakeFriesCommand implements Order {
private Cook cook;
public CookMakeFriesCommand(Cook cook) {
this.cook = cook;
}
@Override
public void execute() {
cook.makeFries();
}
}
public class CookMakeBurgerCommand implements Order {
private Cook cook;
public CookMakeBurgerCommand(Cook cook) {
this.cook = cook;
}
@Override
public void execute() {
cook.makeBurger();
}
}
public class Cook {
public Cook() {}
public void makeBurger() {
System.out.println("Making a burger");
}
public void makeFries() {
System.out.println("Making fries");
}
}
public class Customer {
Waitress waitress;
public Customer(Waitress waitress) {
this.waitress = waitress;
}
public void hungry(Order o) {
System.out.println("服务员点餐");
waitress.takeOrder(o);
}
}
public class Waitress {
Order order;
public Waitress() {
}
private void setOrder(Order order){
this.order=order;
}
public void takeOrder(Order order) {
setOrder(order);
order.execute();
}
}
public class Diner {
public static void main(String[] args) {
Cook cook = new Cook();
Waitress waitress = new Waitress();
Customer customer = new Customer(waitress);
CookMakeFriesCommand friesCommand=new CookMakeFriesCommand(cook);
CookMakeBurgerCommand burgerCommand=new CookMakeBurgerCommand(cook);
customer.hungry(friesCommand);
customer.hungry(burgerCommand);
}
}
実施例2運動(リモコン)
APIは、スマートホームのすべての種類を制御するスマートホームのリモートコントロールのために設計する必要があります。ライトやガレージのドアの設計例をまず。
図クラス2.1
ラージオブジェクトのメソッドは、より多くのアップにも対応したコマンドクラスを生成するときに、見ることができます。この例を通じて、これはコマンドモードの欠点はあります。
2.2コード
public class GarageDoor {
public GarageDoor() {
}
public void up() {
System.out.println("Garage Door is Open");
}
public void down() {
System.out.println("Garage Door is Closed");
}
public void stop() {
System.out.println("Garage Door is Stopped");
}
public void lightOn() {
System.out.println("Garage light is on");
}
public void lightOff() {
System.out.println("Garage light is off");
}
}
public class Light {
public Light() {
}
public void on() {
System.out.println("Light is on");
}
public void off() {
System.out.println("Light is off");
}
}
public interface Command {
void execute();
}
public class GarageDoorDownCommand implements Command {
GarageDoor garageDoor;
public GarageDoorDownCommand(GarageDoor garageDoor) {
this.garageDoor = garageDoor;
}
@Override
public void execute() {
garageDoor.down();
}
}
public class GarageDoorLightOffCommand implements Command {
GarageDoor garageDoor;
public GarageDoorLightOffCommand(GarageDoor garageDoor) {
this.garageDoor = garageDoor;
}
@Override
public void execute() {
garageDoor.lightOff();
}
}
public class GarageDoorOpenCommand implements Command {
GarageDoor garageDoor;
public GarageDoorOpenCommand(GarageDoor garageDoor) {
this.garageDoor = garageDoor;
}
public void execute() {
garageDoor.up();
}
}
public class GarageDoorStopCommand implements Command {
GarageDoor garageDoor;
public GarageDoorStopCommand(GarageDoor garageDoor) {
this.garageDoor = garageDoor;
}
@Override
public void execute() {
garageDoor.stop();
}
}
public class GarageLightOnCommand implements Command {
GarageDoor garageDoor;
public GarageLightOnCommand(GarageDoor garageDoor) {
this.garageDoor = garageDoor;
}
@Override
public void execute() {
garageDoor.lightOn();
}
}
public class LightOffCommand implements Command {
Light light;
public LightOffCommand(Light light) {
this.light = light;
}
@Override
public void execute() {
light.off();
}
}
public class LightOnCommand implements Command {
Light light;
public LightOnCommand(Light light) {
this.light = light;
}
@Override
public void execute() {
light.on();
}
}
public class SimpleRemoteControl {
Command slot;
public SimpleRemoteControl() {}
public void setCommand(Command command) {
slot = command;
}
public void buttonWasPressed() {
slot.execute();
}
}
public class RemoteControlTest {
public static void main(String[] args) {
SimpleRemoteControl remote = new SimpleRemoteControl();
Light light = new Light();
GarageDoor garageDoor = new GarageDoor();
LightOnCommand lightOn = new LightOnCommand(light);
GarageDoorOpenCommand garageOpen = new GarageDoorOpenCommand(garageDoor);
GarageDoorDownCommand garageDoorDownCommand = new GarageDoorDownCommand(garageDoor);
GarageDoorStopCommand garageDoorStopCommand = new GarageDoorStopCommand(garageDoor);
GarageDoorLightOffCommand garageDoorLightOffCommand = new GarageDoorLightOffCommand(garageDoor);
GarageLightOnCommand garageLightOnCommand = new GarageLightOnCommand(garageDoor);
remote.setCommand(garageOpen);
remote.buttonWasPressed();
remote.setCommand(garageLightOnCommand);
remote.buttonWasPressed();
remote.setCommand(garageDoorStopCommand);
remote.buttonWasPressed();
remote.setCommand(garageDoorDownCommand);
remote.buttonWasPressed();
remote.setCommand(garageDoorLightOffCommand);
remote.buttonWasPressed();
remote.setCommand(lightOn);
remote.buttonWasPressed();
}
}