软件体系结构——层次风格

  一个层次风格的系统按照层次结构组织,每一层为上层服务,并作为下层的用户。

 在层次风格的系统中,内部的层只对相邻的层可见,交互只在相邻的层次之间发生,同时这些交互按照一定的协议进行。

程序示例如下:

【功能】:输入三角形三条边计算面积或周长。

【代码】:

TestingGUI.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class TestingGUI extends JFrame implements ActionListener{
	Choose ch1,ch2;
	JTextField textA,textB,textC;
	JTextArea showArea;
	JButton controlButton,controlButton1;
	TestingGUI(){
		init();
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
      void init(){
    	  ch1=new Mianji();
    	  ch2=new Zhouchang();
    	  textA=new JTextField(5);
    	  textB=new JTextField(5);
    	  textC=new JTextField(5);
          showArea=new JTextArea();
          controlButton=new JButton("计算面积");
          controlButton1=new JButton("计算周长");
          JPanel pNorth=new JPanel();
          pNorth.add(new JLabel("边A:"));
          pNorth.add(textA);
          pNorth.add(new JLabel("边B:"));
          pNorth.add(textB);
          pNorth.add(new JLabel("边C:"));
          pNorth.add(textC);
          pNorth.add(controlButton);
          pNorth.add(controlButton1);
          controlButton.addActionListener(this);
          controlButton1.addActionListener(this);
          add(pNorth,BorderLayout.NORTH);
          add(new JScrollPane(showArea),BorderLayout.CENTER);
      }
      public void actionPerformed(ActionEvent e){
    	  String s=e.getActionCommand();
    	  try{
    		  double a=Double.parseDouble(textA.getText().trim());
    		  double b=Double.parseDouble(textB.getText().trim());
    		  double c=Double.parseDouble(textC.getText().trim());
    		  if(s.equals("计算面积")){
    		  ch1.setA(a);
    		  ch1.setB(b);
    		  ch1.setC(c);
    		  String area=ch1.getResult();
    		  showArea.append("三角形"+a+","+b+","+c+"的面积:") ;
    		  showArea.append(area+"\n");
    		  }
    		  else if(s.equals("计算周长")){
        		  ch2.setA(a);
        		  ch2.setB(b);
        		  ch2.setC(c);
        		  String area=ch2.getResult();
        		  showArea.append("三角形"+a+","+b+","+c+"的周长:") ;
        		  showArea.append(area+"\n");
        		  }
    	  }
    	  catch (Exception ex){
    		  showArea.append("\n"+ex+"\n");
    		  
    	  }
      }
      public static void main(String args[]){
    	  TestingGUI win=new TestingGUI();
    		win.setBounds(100,100,620,300);
    		}

Choose.java
public interface Choose {
	public abstract String getResult();
	public void setA(double a);
	public void setB(double b);
	public void setC(double c);
}
Mianji.java
public   class Mianji implements Choose {
	double sideA,sideB,sideC,area;
	boolean isTriangle;
	public String getResult(){
		if(isTriangle){
			double p=(sideA+sideB+sideC)/2.0;
			area=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC));
			return String.valueOf(area);
		}
		else {
			return "无法计算面积";
		}
	}
	public void setA(double a){
		sideA=a;
		if(sideA+sideB>sideC&&sideA+sideC>sideB&&sideC+sideB>sideA)
        isTriangle=true;
		else
			 isTriangle=false;
	}
	public void setB(double b){
		sideB=b;
		if(sideA+sideB>sideC&&sideA+sideC>sideB&&sideC+sideB>sideA)
        isTriangle=true;
		else
			 isTriangle=false;
	}
	public void setC(double c){
		sideC=c;
		if(sideA+sideB>sideC&&sideA+sideC>sideB&&sideC+sideB>sideA)
        isTriangle=true;
		else
			 isTriangle=false;
	}
}

Zhouchang.java

public   class Zhouchang implements Choose {
	double sideA,sideB,sideC,length;
	boolean isTriangle;
	public String getResult(){
		if(isTriangle){
			length=sideA+sideB+sideC;
			return String.valueOf(length);
		}
		else {
			return "无法计算周长";
		}
	}
	public void setA(double a){
		sideA=a;
		if(sideA+sideB>sideC&&sideA+sideC>sideB&&sideC+sideB>sideA)
        isTriangle=true;
		else
			 isTriangle=false;
	}
	public void setB(double b){
		sideB=b;
		if(sideA+sideB>sideC&&sideA+sideC>sideB&&sideC+sideB>sideA)
        isTriangle=true;
		else
			 isTriangle=false;
	}
	public void setC(double c){
		sideC=c;
		if(sideA+sideB>sideC&&sideA+sideC>sideB&&sideC+sideB>sideA)
        isTriangle=true;
		else
			 isTriangle=false;
	}
	
}

组件:第一层里的TestingGUI类,第二层的Choose接口,Mianji类,Zhouchang类。

连接件: ①在第一层TestingGUI类中声明了第二层Mianji类和Zhouchang类的对象。并调用他们的setA(),setB(),setC()和getResult()方法,第二层的getResult()方法将一个小数结果返回给第一层。

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值