角度の王で責任のデザインパターンモード栄光の23 B鎖のオブジェクト指向プログラミング分析

王の栄光で責任パターンのアプリケーションチェーン

ここに画像を挿入説明

ブリーフ

キングモールの栄光では、プレイヤーはインディアナ州の宝くじに参加することができます。インディアナ州は、二つのタイプを描き、一つは宝くじ、他のダイヤモンド不可欠の宝くじで、通常の2つのインディアナ抽選モードで一度、またはダイヤモンド270 /ポイント5つの連続ドローでダイヤモンド/整数抽選で60可能。前記値は201個のダイヤモンドインディアナ幸運に達したとき、あなたは積分値が361インディアナ幸運に達したとき、あなたは水晶の希少な名誉を得ることができ、希少な結晶王を取得することができ、プレイヤーは特定のヒーローと引き換えに結晶または結晶栄光の王、皮膚、および機器を使用することができますように。
多くの場合、要求は、複数を処理することができます。多くのアプリケーションでは、オブジェクトを扱うことができる、と彼らはチェーンに沿って要求を渡し、チェーンを構成し、このチェーンは、責任の連鎖と呼ばれています。
上記の説明については、インディアナ州の栄光の王は王の栄光でChain of Responsibilityパターンの適用例です。いったん60ダイヤモンド/ダイヤモンド不可欠なポンプをクリックするか、270 /統合抽選結果を達成するために、5回を描くことによって、この問題では、プレーヤー。

具体的には、第1のユーザによって提出要求を受信するインタフェースによって達成され、その後、一例として3つの特定の処理クラスを要求された操作を実現する、請求項クラスで「ダイヤモンド60 /積分ポンピング」賞を与えるためにランダムに14種類を達成します賞品に無作為に割り付け5人に賞品の14種類で達成「ポンプ270ダイヤモンド/ 5つのポイント」、などの賞品は、クラス「幸いなことに、値が後に一定値に達した」レア結晶の道具報酬います。

第二に、Chain of Responsibilityパターン

Chain of Responsibilityパターンは理解:
オブジェクトの複数の要求を処理する機会は、要求の送信者と受信者との間の結合を回避するために、これらは、鎖に一緒オブジェクト、チェーンに沿って要求を渡す:高度に要約しますオブジェクトは、これまでのところ、それを処理するまで。
Javaモードの設計では、ユーザの要求を満たすために設計オブジェクトの多くを必要とするかもしれません。
成熟度モデルのオブジェクト処理のユーザ要求を複数用い責任パターンの鎖は、責任のパターンのキーチェーンは、責任の連鎖に編成、すなわち、後続のオブジェクトへの参照を含む各オブジェクト、及び必要とされる多くのオブジェクトにユーザ要求に割り当てられていますユーザの要求を処理できない場合、彼らは、処理を行うために、ユーザの要求を処理できる場合の責任のチェーン内の各オブジェクトは、ユーザーは、もはや責任のチェーンの次のオブジェクトに要求を渡し、ユーザーの要求を渡す必要がありません責任の連鎖上の次のオブジェクトへ。

二つの役割に責任パターン構造の鎖:
ハンドラ:インタフェースは、ユーザが所定の方法、特定の処理対象によって後続の処理によって特定処理の設定方法を要求する責任がある。
により特定のプロセス:特定の処理がハンドラによって実装されますクラスインターフェイスの例。ユーザの要求を受信した後、すなわち、インターフェースハンドラ、ユーザ要求処理を呼び出すことによって、特定のプロセスによって定義された方法は、インターフェースハンドラは、メソッドの実行中に、所定のメソッドを呼び出し、ユーザの要求を処理することが見出された場合、関連データの取り扱いについて、それ以外の場合は、ユーザへの情報のフィードバックを処理することはできません、その後、彼の後継者オブジェクトへのユーザの要求を渡します。

責任パターンUMLのクラス図のチェーン:

ここに画像を挿入説明

:長所と短所の責任のパターンのチェーン
の利点は:
①のみ責任の連鎖内のオブジェクトと彼の後継者は無関係低い結合関係及び他の目的である。
②より柔軟なアプリケーションに責任の連鎖のものに対処する責任を割り当てるとき性別;
③アプリケーションが動的ハンドラハンドラを追加、削除または再割り当て業務ができ;
④アプリケーションが動的ハンドラ間の順序を変更することができます。
⑤ユーザは、ユーザによる情報処理の責任の連鎖を知っている必要はありません最終的には分からないであろう彼の要求との契約対象です。
欠点:
①要求が受信されなければならないことを保証なし:受信者が明確ではないが、一定の保証するために処理することはできません。
②長すぎるの責任の連鎖を、システムのパフォーマンスに影響を与えます。不適切なチェーンは無限ループを構築することができます。

該当するシナリオのChain of Responsibilityパターン:
①多くのオブジェクトがプログラムを処理オブジェクトが自動的に動作中の利用者を決定することを期待して、ユーザの要求を処理することができますがあります。
②ユーザーが明示的に複数の受信者に提出し、例の受信者を指定する必要はありませんという希望要求;
③動的オブジェクトによって開発されたプログラムは、ユーザが設定を要求処理することができます。

第三に、コードの責任パターン構成図の鎖および栄光達成角の王

Chain of Responsibilityパターンは、このUMLのクラス図を達成します

ここに画像を挿入説明

図構造日食

ここに画像を挿入説明
[主な機能のアプリケーション(応用)]
Application.java

package angle_responsibility;

/*
          测试应用类 
*/

import angle_responsibility.Application;
import angle_responsibility.Diamond60DrawAPrize;
import angle_responsibility.Handler;
import angle_responsibility.Diamond270DrawFivePrizes;
import angle_responsibility.RareCrystalOfKings;

public class Application {
	    private Handler diamond60,diamond270,rareDiamond;    //责任链上的对象
	    public void createChain(){       //建立责任链
	    	diamond60=new Diamond60DrawAPrize();
	    	diamond270=new Diamond270DrawFivePrizes();
	    	rareDiamond=new RareCrystalOfKings();
	    	diamond60.setNextHandler(diamond270);
	    	diamond270.setNextHandler(rareDiamond);
	    }
	    public void reponseClient(int number){  //响应用户的请求
	    	diamond60.handleRequest(number);
	    }
	    public static void main(String args[]){
	       Application  application=new  Application();
	       application.createChain();
	       System.out.println("当点击“60钻石”抽一次时:");
	       System.out.print("[购买成功]");
	       application.reponseClient(60);
	       System.out.println("---------------------------");
	       System.out.println("当点击“270钻石”抽五次时:");
	       System.out.print("[购买成功]");
	       application.reponseClient(270);
	       System.out.println("---------------------------");
	       System.out.println("当钻石抽奖“幸运值达201时”:");
	       System.out.print("[购买成功]");
	       application.reponseClient(201);
	    }

	}

ハンドラ(ハンドラ)
Handler.java

package angle_responsibility;

/*
            角色1:处理者 :是一个接口,负责规定具体处理者处理用户请求的方法以及具体处理者设置后继对象的方法
*/

import angle_responsibility.Handler;

public interface Handler {
	   public abstract void handleRequest(int number);   //具体处理用户请求60钻石抽一次还是270钻石抽五次
	   public abstract void setNextHandler(Handler handler);  

}

詳細なハンドラ(ConcreteHandler)
Diamond60DrawAPrizeの.java

package angle_responsibility;

/*
              角色2.1:具体处理者 :具体处理者是实现处理者接口的类的实例
                              具体处理者通过调用处理者接口规定的方法,处理用户的请求
                              即在接到用户的请求后,处理者将调用接口规定的方法,在执行该方法的过程中
                              如果发现能处理用户的请求,就处理有关数据
                              否则就反馈无法处理的信息给用户,然后将用户的请求传递给自己的后继对象
*/

import angle_responsibility.Handler;

public class Diamond60DrawAPrize implements Handler{
	 private Handler handler;      //存放当前处理者后继的Hander接口变量
     public void handleRequest(int number){
    	if(number==60){              //60钻石抽一次
    		String random = "";
            String[] doc = {"白起", "夏侯惇", "甄姬", "金币288","小喇叭5","铭文碎片1600", "铭文碎片400","铭文碎片100", "铭文碎片25", "爱心气球(3日)", "亲密玫瑰","钻石48","龙域领主体验卡"};
            int index = (int) (Math.random() * doc.length);         //随机选取其一输出
            random = doc[index];
            System.out.println(random);
    	}
    	else
    		handler.handleRequest(number);     //将请求传递给下一个处理者
        }
      public void setNextHandler(Handler handler){
         this.handler=handler;
    }

}

Diamond270DrawFivePrizes、Javaの

package angle_responsibility;

/*
              角色2.2:具体处理者 :具体处理者是实现处理者接口的类的实例
                              具体处理者通过调用处理者接口规定的方法,处理用户的请求
                              即在接到用户的请求后,处理者将调用接口规定的方法,在执行该方法的过程中
                              如果发现能处理用户的请求,就处理有关数据
                              否则就反馈无法处理的信息给用户,然后将用户的请求传递给自己的后继对象
*/

public class Diamond270DrawFivePrizes implements Handler{
	private Handler handler;      //存放当前处理者后继的Hander接口变量
    public void handleRequest(int number){
   	if(number==270){               //270钻石抽五次
   		   String random,random1,random2,random3,random4 = "";
           String[] doc = {"白起", "夏侯惇", "甄姬", "金币288","小喇叭5","铭文碎片1600", "铭文碎片400","铭文碎片100", "铭文碎片25", "爱心气球(3日)", "亲密玫瑰","钻石48","龙域领主体验卡"};
           int index = (int) (Math.random() * doc.length);      //随机选取其五输出
           random = doc[index];
           System.out.print(random+"、");
           int index1 = (int) (Math.random() * doc.length);
           random1 = doc[index1];
           System.out.print(random1+"、");
           int index2 = (int) (Math.random() * doc.length);
           random2 = doc[index2];
           System.out.print(random2+"、");
           int index3 = (int) (Math.random() * doc.length);
           random3 = doc[index3];
           System.out.print(random3+"、");
           int index4 = (int) (Math.random() * doc.length);
           random4 = doc[index4];
           System.out.println(random4);
   	}
   	else
            handler.handleRequest(number);      //将请求传递给下一个处理者
       }
     public void setNextHandler(Handler handler){
        this.handler=handler;
   }

}

RareCrystalOfKings.java

package angle_responsibility;

/*
             角色2.3:具体处理者 :具体处理者是实现处理者接口的类的实例
                             具体处理者通过调用处理者接口规定的方法,处理用户的请求
                             即在接到用户的请求后,处理者将调用接口规定的方法,在执行该方法的过程中
                             如果发现能处理用户的请求,就处理有关数据
                             否则就反馈无法处理的信息给用户,然后将用户的请求传递给自己的后继对象
*/

public class RareCrystalOfKings implements Handler{
	private Handler handler;      //存放当前处理者后继的Hander接口变量
    public void handleRequest(int number){
   	if(number==201){               //当幸运值满201时,出稀有水晶
           System.out.println("【稀有】王者水晶");
   	}
   	else
            handler.handleRequest(number);      //将请求传递给下一个处理者
       }
     public void setNextHandler(Handler handler){
        this.handler=handler;
   }

}

スクリーンショットの演算結果
賞は、テストを撮影したいくつかの写真ほど、ランダムであるため、

第1ポンピング:
ここに画像を挿入説明
第2ポンピング:
ここに画像を挿入説明
......

N番目のポンプ:

ここに画像を挿入説明
→クリックして私の中の王の栄光で複数のアプリケーションのデザインパターンホーム

学習の交流と一緒にウェルカムメッセージ、

読んでくれてありがとう

終わり

リリース9件のオリジナルの記事 ウォン称賛10 ビュー7068

おすすめ

転載: blog.csdn.net/IT_charge/article/details/105011204