通过接口降低关联性

阅读更多
A调用B但更改A的内容,若希望B不发生改变,可以创建一个接口,连接A,B
1.创建一个接口M
2.用A实现这个接口
3.通过构造函数把接口传到B中,在B中使用接口方法
(或者使用队列,在B中设置一个ADD方法)
4.在A中实例化B,并把A作为M接口传入B(队列:把A加入B),这样在修改A时,无需修改B的内容,在B中使用的M方法即为A中实现的方法。

//接口
public interface MsgListener {
 public void recvMsg(String msg);
}

/**
 * 计时
 * @author Administrator
 *
 */
public class Time extends Thread{
	//接口
	private MsgListener listener;
	//接口队列
    private ArrayList listeners=new ArrayList();
   //向接口队列中添加接口
    
    public void addListener(MsgListener listener){
    	listeners.add(listener);
    }
    public void run(){
    	//计时
    	while(true){
    		try {
				sleep(100);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
    		
    	for(int i=0;i 
 
/**
 * 主函数
 * @author zll
 *   在ui中进行修改时,无需变动time中的内容
 */
public class TimeUI implements MsgListener{
JLabel label;
//基本界面
public void initUI(){
	JFrame jf=new JFrame();
	jf.setDefaultCloseOperation(3);
	jf.setLayout(new FlowLayout());
	jf.setSize(500, 500);
	label=new JLabel();
	jf.add(label);
	jf.setVisible(true);
}

public void recvMsg(String msg) {
	//显示msg
 label.setText(msg);
}
public static void main(String[] args){
	TimeUI ui1=new TimeUI();
	ui1.initUI();
	Time time=new Time();
	//在time 中添加接口(ui),在time的有关接口的方法中,用ui中的实例方法
	time.addListener(ui1);
	time.start();
}
}

你可能感兴趣的:(java)