首页 > 其他分享 >仲裁者模式

仲裁者模式

时间:2023-12-18 09:45:22浏览次数:28  
标签:仲裁者 mediator void private 模式 public setColleagueEnable

仲裁者模式和中介者模式类似,但作用又有不同之处,仲裁者模式是对多个对象的管理协调,而中介者一般是一代一。

仲裁者有两个角色,仲裁者和被仲裁者,使用场景比如winform模式,form就是仲裁者,各种控件就是被仲裁者,仲裁者负责协调管理。

代码示例

package designMode.mediator;

public interface Mediator {
public abstract void createColleagues();
public abstract void ColleagueChanged();
}

package designMode.mediator;

public interface Colleague {
public abstract void setMediator(Mediator mediator);
public abstract void setColleagueEnable(boolean enable);
}

package designMode.mediator;

import java.awt.*;

public class ColleagueButton extends Button implements Colleague {
private static final long serialVersionUID = 1309335015058337931L;
public ColleagueButton(String caption){
super(caption);
}

private Mediator mediator;
@Override
public void setMediator(Mediator mediator) {
this.mediator=mediator;
}

@Override
public void setColleagueEnable(boolean enable) {
setEnabled(enable);
}
}

package designMode.mediator;

import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

public class ColleagueCheckBox extends Checkbox implements ItemListener,Colleague {
private static final long serialVersionUID = -628547709974079324L;
public ColleagueCheckBox(String caption,CheckboxGroup g,boolean b){
super(caption,g,b);
}
private Mediator mediator;
@Override
public void setMediator(Mediator mediator) {
this.mediator=mediator;
}

@Override
public void setColleagueEnable(boolean enable) {
setEnabled(enable);
}

@Override
public void itemStateChanged(ItemEvent e) {
mediator.ColleagueChanged();
}
}

package designMode.mediator;

import java.awt.*;
import java.awt.event.TextEvent;
import java.awt.event.TextListener;

public class ColleagueTextField extends TextField implements TextListener,Colleague {
private static final long serialVersionUID = 8539124564669846422L;
public ColleagueTextField(String text,int columns){
super(text,columns);
}
private Mediator mediator;
@Override
public void setMediator(Mediator mediator) {
this.mediator=mediator;
}

@Override
public void setColleagueEnable(boolean enable) {
setEnabled(enable);
setBackground( enable? Color.WHITE : Color.BLACK );
}

@Override
public void textValueChanged(TextEvent e) {
mediator.ColleagueChanged();
}
}

package designMode.mediator;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class LoginFrame extends Frame implements ActionListener, Mediator {
private static final long serialVersionUID = -509490729876024682L;

private ColleagueButton buttonOK;
private ColleagueButton buttonCancel;

private ColleagueCheckBox chkGuest;
private ColleagueCheckBox chkUser;

private ColleagueTextField tfUser;
private ColleagueTextField tfPass;

public LoginFrame(String title){
super(title);
setBackground(Color.lightGray);
setLayout(new GridLayout(4,2));
createColleagues();
add(chkGuest);
add(chkUser);
add(new Label("用户名:"));
add(tfUser);
add(new Label("密码:"));
add(tfPass);
add(buttonOK);
add(buttonCancel);
ColleagueChanged();
pack();
show();
}

public void createColleagues() {
CheckboxGroup chk=new CheckboxGroup();
chkGuest=new ColleagueCheckBox("Guest",chk,true);
chkUser=new ColleagueCheckBox("User",chk,false);
buttonOK=new ColleagueButton("OK");
buttonCancel=new ColleagueButton("Cancel");
tfUser=new ColleagueTextField("",10);
tfPass=new ColleagueTextField("",10);
tfPass.setEchoChar('#');

chkGuest.setMediator(this);
chkUser.setMediator(this);
buttonOK.setMediator(this);
buttonCancel.setMediator(this);
tfUser.setMediator(this);
tfPass.setMediator(this);

chkGuest.addItemListener(chkGuest);
chkUser.addItemListener(chkUser);
buttonOK.addActionListener(this);
buttonCancel.addActionListener(this);
tfUser.addTextListener(tfUser);
tfPass.addTextListener(tfPass);

}

public void ColleagueChanged() {

if(chkGuest.getState()){
tfUser.setColleagueEnable(false);
tfPass.setColleagueEnable(false);
buttonOK.setColleagueEnable(true);
}else{
tfUser.setColleagueEnable(true);
userPassChanged();
}
}

private void userPassChanged() {
if(tfUser.getText().length()>0){
tfPass.setColleagueEnable(true);
if(tfPass.getText().length()>0){
buttonOK.setColleagueEnable(true);
}else{
buttonOK.setColleagueEnable(false);
}
}else{
tfPass.setColleagueEnable(false);
buttonOK.setColleagueEnable(false);
}

}

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

package designMode.mediator;

public class Main {
public static void main(String[] args) {
LoginFrame login = new LoginFrame("仲裁者模式");
}
}

 

标签:仲裁者,mediator,void,private,模式,public,setColleagueEnable
From: https://www.cnblogs.com/seeksimple/p/17910360.html

相关文章

  • 设计模式(十七)中介者
    一、定义义一个对象来封装一系列的对象交互。中介者模式使各对象不需要显示地相互引用,从而使其耦合松散,而且可以让你相对独立地改变它们之间的交互。中介者模式又称为调停模式,它是一种对象说行为型模式。二、描述在中介者模式中,引入了用于协调其他对象/类之间的相互调用的中介......
  • 行为设计模式-策略模式的优缺点
    策略模式的作用就是把具体的算法实现从业务逻辑中剥离出来,成为一系列独立的算法类,使得他们可以相互替换。举个例子:平常生活中超时基本上都有活动,比如会员日全场9折,周年庆消费多少减多少,抽奖活动等等。那么如果将业务具体落实在代码上,是不是可以用多个条件判断来封装具体的业务逻辑,i......
  • java状态模式
    1定义一个接口2publicinterfaceState{3publicvoidhandle();4}567/**8*具体的状态角色(下单)9*CreatedbyAdministrator10*/11publicclassPlaceAnOrderimplementsState{12//具体化状态的行为13@Override14publ......
  • 23种设计模式——模板模式
    今天我们来学习23种设计模式中的模板模式。模板模式需要注意抽象类与具体子类之间的协作。它用到了虚函数的多态性技术以及“不用调用我,让我来调用你”的反向控制技术。概念:模板模式是定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法......
  • 涉及到 List 集合的查询优化时,通常需要考虑集合的大小、查询的复杂度以及数据访问的模
    Java开发中,当涉及到List集合的查询优化时,通常需要考虑集合的大小、查询的复杂度以及数据访问的模式。以下是一些常见的优化技巧。使用StreamAPI进行并行查询StreamAPI可以很容易地并行化查询操作,这对于大规模数据集的查询非常有用。以下是一个并行查询的示例:importjava.ut......
  • Python实现软件设计模式4:建造者模式
    特点建造者模式是一步一步构建一个复杂的对象,属于对象创建型模式将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示关注如何逐步地创建一个复杂的对象或产品,不同的创造者定义了不同的创建过程用户不需要知道内部的具体构造细节、只用指定复杂对象的类......
  • Python实现软件设计模式3:抽象工厂模式
    特点系统中除了有多种产品类型(产品等级结构,如果汁、方便面、矿泉水),还出现了多个品牌(产品族,或农夫山泉、娃哈哈、康师傅、统一等品牌几乎都有这些产品)在工厂方法模式中,只有一个产品等级结构一个抽象产品(父类)、多个具体产品(子类)形成一个产品等级结构产品族是指由同一个工厂生产......
  • 设计模式概念和分类
    (设计模式概念和分类)概念设计模式一般是指软件开发人员在开发的时候遇到软件设计问题时的一般解决方案,这样当我们遇到重复问题的时候,就能够一次一次地使用该方案而避免了重复劳动。并且可以提高代码的可重用性和可读性,增强系统的可靠性和可维护性,解决一系列的复杂问题,提高协作效......
  • 结构性设计模式-适配器模式的优缺点
    把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法一起工作的两个类能够在一起工作。类的适配器模式对象的适配器模式对象适配器在上图中可以看出:冲突:Target期待调用Request方法,而Adaptee并没有(这就是所谓的不兼容了)。解决方案:为使Target能够使用Ad......
  • [JS] JS单例模式的实现
    JS单例模式的实现单例模式简介单例模式(SingletonPattern)是最简单的设计模式之一。这种类型的设计模式属于创建型模式,提供了一种创建对象的最佳方式。特点:意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。主要解决:一个全局使用的类频繁地创建与销毁。何时使用:当......