角度におけるキングイテレータ栄光のオブジェクト指向プログラミングのデザインパターン23 Bの分析

王の栄光のアプリケーションイテレータパターン

ここに画像を挿入説明

ブリーフ

栄光の王がチームワークMOBAゲームが単一行のプレイヤーポイントよりも比較的容易に黒点を開くには、時間の一般的なAロットでの予選の中で最も重要な選手、された、より競争力のあるゲーム以外のチームを可能にすることですキングホールインターフェイスの栄光ではるかに強く、非常に多くの選手が、あなたはその後、プレイヤーがゲームに参加する友人を招待するかどうかを決定するために、ゲームのリストをQQ /マイクロ文字の友人のステータスを表示することができ、ゲームをプレイするために友人を招待したいと思います。友人がゲームで、プレイヤーは予約モードで一緒にゲームをプレイすることができます場合は、オフラインの友人が、その後、プレイヤーは黒とオープンQQ /マイクロチャネルを通じてのオンラインの友人を招待することができるとき。
これらは、王の栄光における応用例イテレータパターンです。順次プレイヤーは、各バディのステータスを表示したい場合、この例では、オンラインプレイヤーとオフラインプレイヤー情報が異なる形で保存、またはオンラインプレイヤーとプレイヤーをソートのリストは異なるデータ構造での表示情報が処理されて表示されることを想定してプレイヤーに提示されていることを前提としてい内部システムの間に存在する関係の形で上記および他の内容を理解し、彼らは知られたくないとき、友人のステータスやその他の情報を学ぶことができます。

コードセクションは:
UseSet、プレーヤー、アプリケーション:ここでは三つのカテゴリーを設計しました。前記UseSetクラスは、リンクリスト、ハッシュテーブル、およびツリーのセットが含まれています。反復モードを使用してアプリケーション・クラス関係は、実施例HashSetのクラス、すなわち、アナログバディステータスのセット、例HashSetのクラスは、反復子アナログトラバース及び処理プロセスと、反復子()はイテレータを返す呼び出し、さらに私たちは、さまざまな状況オンラインプレイヤーに応じて処理されます。Applicationクラスの例には、プレーヤーを作成し、UseSetに含まれるコレクションに追加する責任があり、UseSetの提供は、name属性法によるプレーヤープレーヤーインスタンスはまた、プレイヤーのインスタンスの分プロパティによってソートする方法を提供して下さい。

第二に、反復モード(イテレータパターン)

:イテレータパターン認識
対象物の逐次重合個々の要素にアクセスするための方法を提供することが、オブジェクト表現の内部を露出させる必要はない:非常にまとめます。
データの構築と関連する操作合理的な組織では、多くの場合、我々はそのようなリンクリスト、ハッシュテーブルおよびその他のデータ構造として使用し、そのようなプログラミングなど、プログラミングの重要な側面です。リンクされたリストやハッシュテーブルおよびその他のデータ構造は差がストアオブジェクトに別の道を押している、オブジェクトの数があり、コレクションに保存することができ、我々は一定の方法で許可されるべき手続きのどのセットに関係なく、コレクション内のオブジェクトを横断することを願っていますこれらのオブジェクトが収集および保管に表現されている方法を知っている必要はありません。
イテレータパターンはのコレクションを成熟したモードで、キーイテレータパターンと呼ばれるイテレータへのオブジェクトのコレクションを作業です

4つのロールの反復モード構造:
セット(集合):インタフェース、達成すべき特定の操作の所定のセット、
特定のセット(ConcreteAggregate) コレクションの具体例としては、押圧の特定のセットを実装するインタフェースクラスのセットでありますオブジェクトの特定の構造を保存します。;詳細なセットは、戻りコレクションの特定のイテレータをそのメソッドを有していなければならない
反復子(イテレータ)インターフェースは、特定のセットを横断する方法を指定し;
特定のイテレータ(ConcreteIterator) 実装イテレータインターフェース特定のクラスのインスタンスで、指定された反復のコレクションをメソッド・イテレータは、オブジェクトが押下設定されたデータ構造の組、のセットを見つけるために各時間を見つけることで、メソッドの最初の呼び出していることを確認するために実装オブジェクト参照即時後継トラバーサルの得られた組の記憶構造に従ってオブジェクトおよび方法を順次呼び出しがコレクション全体を横断することができることを確認します。

イテレータパターンUMLクラス図:

ここに画像を挿入説明

欠点のイテレータパターン:
長所:
①イテレータは、これらのオブジェクトを収集し、保管に表現されている方法を知らなくても、コレクション内のオブジェクトのユーザーアクセス、
②複数のユーザが同時にコレクションを反復処理を使用することができます。
③ ; - 「閉鎖原理開口」満たす
:欠点
による職務の分離を反復モードとデータを記憶データを介して、新しいクラスを追加する新しい重合イテレータクラスの対応する増加を必要とし、ペア増加のクラス数、どのある程度システムの複雑さが増します。

イテレータパターン該当シーン:
①アクセスをユーザーに許可するには、コレクション内のオブジェクトが、コレクションに格納されたオブジェクトの構造を公開したくない、
②コレクションを異なるループへの希望、統一されたインタフェースを提供します。

第三に、イテレータパターンの構成コードの図と栄光の王の角度を達成するために

図構造日食
ここに画像を挿入説明

[主な機能のアプリケーション(応用)]
Application.java

package angle_iteratorPattern;

import java.util.*;

public class Application {

	    public static void main(String[] args) {
	        System.out.println("");
	    	int friends=10;         //好友列表共10人
	        Collection<Online> set=new HashSet<Online>();  //集合对象
	        for(int i=1;i<=friends;i++){
	           if(i==7||i==8||i==9||i==10)
	             set.add(new Online(10,false));
	           else	
	             set.add(new Online(10,true)); 
	        }
	        Iterator<Online> iterator=set.iterator();       //迭代器
	        System.out.println("好友列表共有"+set.size()+"人");
	        int k=0; 
	        while(iterator.hasNext()){
	        	Online money=iterator.next();
	            k++; 
	            if(money.getIsTrue()==false){
	               iterator.remove();
	               k++;
	            }
	        }
	        System.out.println("好友列表在线"+set.size()+"人");  
	        System.out.println("------------------------------------------");  
	        
	        UseSet useSet=new UseSet(); 
	        useSet.addPlayers(new Players("爱喝爽歪歪    ","铂金Ⅳ           ",2));
	        useSet.addPlayers(new Players("韩信了你的邪","钻石Ⅲ            ",13));
	        useSet.addPlayers(new Players("沙滩、绅士   ","星耀Ⅰ              ",31));
	        useSet.addPlayers(new Players("崽种来打我呀","最强王者x23 ",16));
	        useSet.addPlayers(new Players("我想上分分   ","钻石Ⅴ             ",27));
	        useSet.addPlayers(new Players("峡谷一级演员","黄金Ⅱ             ",9));
	        System.out.println("在线好友按开局时长排列:");
	        useSet.printPlayersByMinutes();
	        System.out.println("------------------------------------------");  
	        
	        String n="峡谷一级演员";
	        System.out.println("查找名字为“"+n+"”的玩家:");
	        useSet.lookPlayers(n);
	        System.out.println("------------------------------------------");  
	        String s="油炸小可爱";
	        System.out.println("查找名字为“"+s+"”的玩家:");
	        useSet.lookPlayers(s);
	    }
	 
}
class Online{            //玩家在线状态
	   int value;
	   private boolean isTrue;
	   Online(int value,boolean b){
	      this.value=value;
	       isTrue=b;
	   } 
	   public boolean getIsTrue(){
	      return isTrue;
	   }
	   public int getValue(){
	      return value;
	   }
	}

UseSetクラス
UseSet.java

package angle_iteratorPattern;

import java.util.*; 

public class UseSet{
    LinkedList<Players> list;      //使用链表存放玩家对象
    //用一个散列表和一个树集存放链表中的对象
    Hashtable<String,Players> table;    
    TreeSet<Players> tree;          
    UseSet(){
       list=new LinkedList<Players>();
       table=new Hashtable<String,Players>();
       tree=new TreeSet<Players>(); 
    }
    public void addPlayers(Players player){
       list.add(player);
       update();
    }
    
    public void lookPlayers(String names){                 //使用散列表查询某个玩家状态信息
    	Players players=table.get(names);
    	if(players==null){
    		System.out.println("此人离线,您可通过QQ【邀请】他上线");
    	}
    	else{
            int minute=players.getMinute();
            System.out.println("开局"+minute+"分钟,可【预约】");
        }
    }

    public void printPlayersByMinutes(){              //通过树集将玩家按开局时长排序
          Iterator<Players> iterator=tree.iterator();
          while(iterator.hasNext()){
        	    Players player=iterator.next();
                String name=player.getName();
                String level=player.getLevel();
                int minute=player.getMinute();
                System.out.println("名字:"+name+"   段位:"+level+" 开局"+minute+"分钟");
       }
    }
    private void  update(){
       tree.clear(); 
       Iterator<Players> iterator=list.iterator();
       while(iterator.hasNext()){
    	   Players player=iterator.next();
           String name=player.getName();
           table.put(name,player);
           tree.add(player); 
       }
    }
}


以下のようなプレーヤー
Players.java

package angle_iteratorPattern;

import java.util.*; 

class Players implements Comparable{
    String name,level;     //段位星数,名字
    int minute=0;       //开局时长
    Players(String name,String level,int minute){
        this.name=name;
        this.level=level;
        this.minute=minute;
    }
    public int compareTo(Object b){       
    	Players plater=(Players)b;
        return (int)(this.minute-plater.minute);
    }
    public String getLevel(){
        return level;
    }
    public String getName(){
        return name;
    }
    public int getMinute(){
        return minute;
    }
}

スクリーンショットの営業成績

ここに画像を挿入説明

王の栄光で複数のアプリケーションのデザインパターン、してくださいをクリックしてマイ→ ホーム

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

読んでくれてありがとう

終わり

公開された11元の記事 ウォンの賞賛156 ・は 20000 +を見て

おすすめ

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