• 16、Mediator *者模式


    Mediator

    Mediator

    Mediator Mediator
    Colleague Colleague
    ColleagueButton  Colleague  ConcreteColleague
    ColleagueTextField  Colleague  ConcreteColleague
    ColleagueCheckbox  Colleague  ConcreteColleague
    LoginFrame  Mediator  ConcreteMediator
    Main  

    Mediator.java

     package mediator;
     
     public interface Mediator {
         public abstract void createColleague();
         public abstract void colleagueChanged();
     }

    Colleague.java

     package mediator;
     
     public interface Colleague {
         public abstract void setMediator(Mediator mediator);
         public abstract void setColleagueEnabled(boolean enabled);
     }

    ColleagueButton.java

     package mediator;
     
     import java.awt.*;
     
     public class ColleagueButton extends Button implements Colleague {
         private Mediator mediator;
         public ColleagueButton(String caption) {
             super(caption);
        }
         public void setMediator(Mediator mediator) {
             this.mediator = mediator;
        }
         public void setColleagueEnabled(boolean enabled) {
             setEnabled(enabled);
        }
     }

    ColleagueTextField.java

     package mediator;
     
     import java.awt.*;
     import java.awt.event.TextEvent;
     import java.awt.event.TextListener;
     
     public class ColleagueTextField extends TextField implements TextListener, Colleague {
         private Mediator mediator;
         public ColleagueTextField(String text, int columns) {
             super(text, columns);
        }
         public void setMediator(Mediator mediator) {
             this.mediator = mediator;
        }
         public void setColleagueEnabled(boolean enabled) {
             setEnabled(enabled);
             setBackground(enabled ? Color.WHITE : Color.lightGray)
       
        public void textValueChanged(TextEvent e) 
            mediator.colleagueChanged()
       
    }

    ColleagueCheckbox.java

     package mediator;
     
     import java.awt.*;
     import java.awt.event.ItemEvent;
     import java.awt.event.ItemListener;
     
     public class ColleagueCheckbox extends Checkbox implements ItemListener, Colleague {
         private Mediator mediator;
         public ColleagueCheckbox(String caption, CheckboxGroup group, boolean state) {
             super(caption, group, state);
        }
         public void setMediator(Mediator mediator) {
             this.mediator = mediator;
        }
         public void setColleagueEnabled(boolean enabled) {
             setEnabled(enabled)
            setBackground(enabled ? Color.WHITE : Color.lightGray)
       
        public void itemStateChanged(ItemEvent e) 
            mediator.colleagueChanged()
       
    }

    LoginFrame.java

     package mediator;
     
     import java.awt.*;
     import java.awt.event.ActionEvent;
     import java.awt.event.ActionListener;
     
     public class LoginFrame extends Frame implements ActionListener, Mediator {
         private ColleagueCheckbox checkGuest;
         private ColleagueCheckbox checkLogin;
         private ColleagueTextField textUser;
         private ColleagueTextField textPass;
         private ColleagueButton buttonOk;
         private ColleagueButton buttonCancel;
     
         // 
         // Colleague
         public LoginFrame(String title) 
            super(title)
            setBackground(Color.lightGray)
            setLayout(new GridLayout(4, 2))
            createColleague()
            add(checkGuest)
            add(checkLogin)
            add(new Label("Username:"))
            add(textUser)
            add(new Label("Password:"))
            add(textPass)
            add(buttonOk)
            add(buttonCancel)
            colleagueChanged()
            pack()
            show()
       }  

        public void createColleague() 
            CheckboxGroup g = new CheckboxGroup()
            checkGuest = new ColleagueCheckbox("Guest", g, true)
            checkLogin = new ColleagueCheckbox("Login", g, false)
            textUser = new ColleagueTextField("", 10)
            textPass = new ColleagueTextField("", 10)
            textPass.setEchoChar('*')
            buttonOk = new ColleagueButton("OK")
            buttonCancel = new ColleagueButton("Cancel")
            checkGuest.setMediator(this)
            checkLogin.setMediator(this)
            textUser.setMediator(this)
            textPass.setMediator(this)
            buttonOk.setMediator(this)
            buttonCancel.setMediator(this)
            checkGuest.addItemListener(checkGuest)
            checkLogin.addItemListener(checkLogin)
            textUser.addTextListener(textUser)
            textPass.addTextListener(textPass)
            buttonOk.addActionListener(this)
            buttonCancel.addActionListener(this)
       }  

        public void colleagueChanged() 
            if (checkGuest.getState()) 
                textUser.setColleagueEnabled(false)
                textPass.setColleagueEnabled(false)
                buttonOk.setColleagueEnabled(true)
           } else 
                textUser.setColleagueEnabled(true)
                userpassChanged()
           
       }  

        private void userpassChanged() 
            if (textUser.getText().length() > 0) 
                textPass.setColleagueEnabled(true)
                if (textPass.getText().length() > 0) 
                    buttonOk.setColleagueEnabled(true)
               } else 
                    buttonOk.setColleagueEnabled(false)
               
           } else 
                textPass.setColleagueEnabled(false)
                buttonOk.setColleagueEnabled(false)
           
       }  

        public void actionPerformed(ActionEvent e) 
            System.out.println(e.toString())
            System.exit(0)
       
    }

    Main.java

     package mediator;
     
     public class Main {
         static public void main(String args[]) {
             new LoginFrame("Mediator Sample");
        }
     }

    Mediator

    1. Mediator()

      Mediator Colleague

    2. ConcreteMediator()

      ConcreteMediator Mediator

    3. Colleague()

      Colleague Mediator

    4. ConcreteColleague()

      ConcreteColleague Colleague

    Bug

    ConcreteColleague ConcreteMediator

    公众号发哥讲

    这是一个稍偏基础和偏技术的公众号,甚至其中包括一些可能阅读量很低的包含代码的技术文,不知道你是不是喜欢,期待你的关注。

    img

    如果你觉得文章还不错,就请点击右上角选择发送给朋友或者转发到朋友圈~

    ● 扫码关注我们

    据说看到好文章不推荐的人,服务器容易宕机!

    本文版权归发哥讲博客园共有,原创文章,未经允许不得转载,否则保留追究法律责任的权利。

     

  • 相关阅读:
    【prufer编码】BZOJ1430 小猴打架
    【费马小定理】BZOJ3260 跳
    【欧拉函数】BZOJ2705: [SDOI2012]Longge的问题
    【卡特兰数】BZOJ1485: [HNOI2009]有趣的数列
    【缩点+拓扑判链】POJ2762 Going from u to v or from v to u?
    【Floyd】BZOJ1491: [NOI2007]社交网络
    【转】对信息学竞赛中调试方法的建议
    【建图+拓扑判环】BZOJ3953: [WF2013]Self-Assembly
    【dfs判负环】BZOJ1489: [HNOI2009]最小圈
    【二分+最小树形图】UVA11865 比赛网络
  • 原文地址:https://www.cnblogs.com/naimao/p/13446497.html
Copyright © 2020-2023  润新知