zoukankan      html  css  js  c++  java
  • 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

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

    ● 扫码关注我们

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

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

     

  • 相关阅读:
    UVa 1151 Buy or Build【最小生成树】
    UVa 216 Getting in Line【枚举排列】
    UVa 729 The Hamming Distance Problem【枚举排列】
    HDU 5214 Movie【贪心】
    HDU 5223 GCD
    POJ 1144 Network【割顶】
    UVa 11025 The broken pedometer【枚举子集】
    HDU 2515 Yanghee 的算术【找规律】
    Java基本语法
    Java环境变量,jdk和jre的区别,面向对象语言编程
  • 原文地址:https://www.cnblogs.com/naimao/p/13446497.html
Copyright © 2011-2022 走看看