JAvaにおけるインタフェースによるコールバックエージェント設定モードの使用

6514 ワード

≪プロキシ・モードの定義|Proxy Mode Definition|ldap≫:このオブジェクトへのアクセスを制御するために、他のオブジェクトにプロキシを提供します.場合によっては、あるオブジェクトが別のオブジェクトに適していないか、直接参照できない場合がありますが、エージェントオブジェクトはクライアントとターゲットオブジェクトの間で仲介の役割を果たすことができます.エージェントクラスは委任クラスと同じインタフェースを持っていることを特徴としています.エージェントモードはよく使われるjava設計モードです.次にdemoを書いてエージェントモードを使用し、interfaceを使用する場合と使用しない場合の2つの処理を通じて、interfaceを使用する利点がどこにあるかを見てみましょう.
一.インタフェースを使用しない場合のエージェントの実現
1.まず、読解インタフェースとしてクラスReadを定義し、表示されたテキストを表示し、クラスChatを定義します.
3つのプロパティtext,color,sizeを設定し,プロキシプロシージャによって外部にそのcolorとsizeプロパティを設定することを目的とする.Readクラス:
public class Read {
    private String text;
    private String color;//       
    private int size;//       

    public Read(String text){
        this.text = text;
    }
}

Chatクラス:
public class Chat {
    private String text;
    private String backgroundColor;
    private int size;

    public Chat(String text){
        this.text = text;
    }

この2つのクラスでは、設定ページに入るシミュレーションを行う方法goToSeting()が用意されています.このメソッド内で行うべきことは、1.設定ページのオブジェクトを作成すること2.設定ページにプッシュすること
また、プロパティを変更してデータを返す方法も定義します.Read類の中:
   //                      
   public void change(String color, int size){
        System.out.println("     :"+this.color+" "+"  :"+this.size);
        this.color = color;
        this.size = size;
        System.out.println("     :"+this.color+" "+"  :"+this.size);
    }

Chat類の中:
 public void doChange(String backgroundColor,int size){
        System.out.println("       :"+this.backgroundColor+"  "+"  :"+this.size);
        this.backgroundColor = backgroundColor;
        this.size = size;
        System.out.println("       :"+this.backgroundColor+"  "+"  :"+this.size);
    }

2.次に、設定ページとしてクラス設定ページを定義し、フォントサイズと色を設定できます.
Settingクラスでは、2つの属性レコードを誰に色とサイズを設定するかを定義し、レコードが終わったら誰にデータを返す必要があります.次のように定義します.
Read read; Chat chat;
次にstartSettings()を書いて、仕事を始める方法を書きます.属性を設定します.完了したら、change()メソッドを呼び出してデータを返します.Settingクラスで実装:
public class Setting {
    //                           
    Read read;
    Chat chat;
    public Setting(Read read){
        this.read = read;
    }
    public Setting(Chat chat) {
        this.chat = chat;
    }
    //    
    public void startSetting(){
        System.out.println("    ....");
        System.out.println("        !!!");
        if (read != null){
            read.change("  ",30);
        }
        if (chat != null) {
            chat.doChange("  ", 20);
        }
    }
}

ここでは、誰が仕事をしたかを記録するreadオブジェクトとchatオブジェクトがnullであるかどうかを判断してから、change()メソッドを呼び出してデータを返すことができ、直接データを返すことができないことに注意してください.外部でReadオブジェクトとChatオブジェクトを作成し、goToSettings()メソッドを呼び出してプロパティを設定すると、同時に1つのオブジェクトだけがこのメソッドを呼び出してプロパティを変更し、複数の同時呼び出しの場合、エラーが発生します.エラーは次のとおりです.
    ....
        !!!
     :null   :0
     :     :30
Exception in thread "main" java.lang.NullPointerException
    at day7.Setting.startSetting(Setting.java:40)
    at day7.Read.goToSeting(Read.java:20)
    at day7.MyClass.main(MyClass.java:13)

Process finished with exit code 1

次に,2つのクラス内でページへのシミュレーションを行うgoToSettings()メソッドを実現する必要がある.
Read類の中:
    //        
    public void goToSeting(){
        //1.         
        Setting setting = new Setting(this);
        //2.       
        setting.startSetting();
    }

Chat類の中:
public void goToSetting(){
        Setting setting = new Setting(this);
        setting.startSetting();
    }

最後にmainメソッドにオブジェクトを作成し、メソッドを呼び出します.
public class MyClass {
    public static void main(String[] args){

//        Read r1 = new Read("Hello World!");
//        r1.goToSeting();

        Read r2 = new Read("test");
        r2.goToSeting();
        Chat c1 = new Chat("Hello");
        c1.goToSetting();

    }
}

二.インタフェース(interface)を用いてエージェントを実現する
1.プロパティを設定するためのSettingsメソッドを定義します.
属性を設定した後にデータを消去するため、複数のクラスの属性を設定する必要がある場合があります.各クラスには独自のデータを返す方法があり、方法が統一されていません.また、オブジェクトを追加するたびにSettingsクラスを使用するには、このクラスのオブジェクトと構造方法を追加する必要があります.
そのため、マルチステートを使用して、内部インタフェースを定義し、データを伝達する方法を統一的に管理し、Settingを使用するクラスごとにこの方法を実現しなければならないことを保証する必要があります.
Settingクラスでは、内部インタフェースを定義します.
 public interface FontSettingInterface{
       //            
        public void change(String color,int size);
    }

オブジェクトの作成
    FontSettingInterface obj;
    public Setting(FontSettingInterface obj){
        this.obj = obj;
    }

データの転送
 public void startSetting(){
        System.out.println("    ....");
        System.out.println("        !!!");
        obj.change("  ",25);
   }

2.Settingクラスを使用するには、このインタフェースを実装し、渡されるオブジェクトを設定し、インタフェースメソッドを実装する必要があります.
Readクラス:
public class Read implements Setting.FontSettingInterface{
    private String text;
    private String color;//       
    private int size;//       

    public Read(String text){
        this.text = text;

    }
    //        
    public void goToSeting(){
        //1.         
        Setting setting = new Setting(this);
        //2.       
        setting.startSetting();
    }

    @Override
    public void change(String color, int size) {
        System.out.println("     :"+this.color+" "+"  :"+this.size);
        this.color = color;
        this.size = size;
        System.out.println("     :"+this.color+" "+"  :"+this.size);
    }
}

Chatクラス:
public class Chat implements Setting.FontSettingInterface {
    private String text;
    private String backgroundColor;
    private int size;

    public Chat(String text){
        this.text = text;
    }
    public void goToSetting(){
        Setting setting = new Setting(this);
        setting.startSetting();
    }

    @Override
    public void change(String color, int size) {
        System.out.println("       :"+this.backgroundColor+"  "+"  :"+this.size);
        this.backgroundColor = color;
        this.size = size;
        System.out.println("       :"+this.backgroundColor+"  "+"  :"+this.size);
    }
}

3.最後にmainメソッドでオブジェクトを作成して呼び出します.
まとめ
このdemoを書くには、インタフェースの使用方法を理解する必要があります.このような簡単なインタフェースを使用することで、インタフェースの使用と実現過程を理解するのに役立ちます.