if((Character.isLetter(nStr.charAt(m))==true)&&
(Character.isDigit(nStr.charAt(m))==true)){
isValid=false;
}
if(nStr.charAt(m)=='@'){
a++;
}
if(nStr.charAt(m)>='0'&&nStr.charAt(m)<='9'){
b++;
isValid=false;
}
}
if(a!
=1){
isValid=false;
}
if(b==0){
isValid=false;
}
returnisValid;
}
else{
returnfalse;
}
}
2、添加CusInfoValidator:
publicabstractbooleanisValidEmailAddr(StringEmailAddr);
3、添加GUI:
txtCustomerName,
(1)privateJTextField
txtAddress,txtZip,txtCellPhone,txtSSN,
txtEmailAddr;
(2)privateJLabellblCustomerName,lblAddress,lblZip,lblCellphone,lblSSN,lblEmailAddr;
(3)txtEmailAddr=newJTextField(20);
(4)lblEmailAddr=newJLabel("EmailAddr:
");
(5)UIPanel.add(lblEmailAddr);
UIPanel.add(txtEmailAddr);
(6)gridbag.setConstraints(lblEmailAddr,gbc);
gbc.gridx=1;
gbc.gridy=5;
gridbag.setConstraints(txtEmailAddr,gbc);
gbc.gridx=0;
gbc.gridy=6;
(7)publicStringgetEmailAddr(){
returntxtEmailAddr.getText();
}
8)Stringemailaddr=getEmailAddr();
(9)if(cusInfo.isValidEmailAddr(emailaddr)==false){
dataTextArea.append("\nWrongformatofEmailAddr.");
}
else{
dataTextArea.append("\nCorrectformatofEmailAddr.");
【实验结果】
Corroctformatotnamo.Correctformatotaddress
CurreUfuirridlufzifucide.
Correctformatofcellphon«numlbor.correctformatotSKN
correctformaralEmailAddr
【实验小结】
通过适配器,客户端可以调用同一接口,因而对客户端来说是透明的。
这样做更简单、更直接、更紧凑;复用了现存的类,解决了现存类和复用环境要求不一致的问题;将目标类和适配者类解耦,通过引入一个适配器类重用现有的适配者类,而无需修改原有代码;一个对象适配器可以把多个不同的适配者类适配到同一个目标,也就是说,同一个适配器可以把适配者类和它的子类都适配到目标接口。
对于对象适配器来说,更换适配器的实现过程比较复杂。
实验三
桥接模式——几何立体体积
【实验内容】
在例3.14中的设计实验层次类部分中,添加Ellipsoid(椭球)类,并且实
现针对椭球体积的计算。
【添加代码】
1、添加椭球类:
publicclassEllipsoidimplementsGeoForm{
privatedoubleaRadius;
privatedoublebRadius;
publicEllipsoid(doubleaRadius,doublebRadius,doublecRadius){
this.aRadius=aRadius;
this.bRadius=bRadius;
this.cRadius=cRadius;
}
publicdoublecomputeVolume(){
bRadius*
doublevolume=1.3333333*3.1415926*aRadius*
cRadius;
returnvolume;
}
}
2、添加GUI:
(1)privateJTextFieldtxtEllipsoidRadius_a;
privateJTextFieldtxtEllipsoidRadius_b;
privateJTextFieldtxtEllipsoidRadius_c;
(2)publicstaticfinalStringELLIPSOID="Ellipsoid";
(3)cmbGeoForm.addItem(ELLIPSOID);
(4)elseif(selection.equals(ELLIPSOID)){
Stringa_radius=txtEllipsoidRadius_a.getText();
Stringc_radius=txtEllipsoidRadius_c.getText();
doublea=Double.valueOf(a_radius);
doubleb=Double.valueOf(b_radius);
doublec=Double.valueOf(c_radius);
form=newEllipsoid(a,b,c);
}
5)elseif(selection.equals(ELLIPSOID))
displayNewGUI(getTypePanel(ELLIPSOID));
6)elseif(type.equals(ELLIPSOID)){
JLabel("InputRadiusa");
JLabel("InputRadiusb");
JLabel("InputRadiusc");
JLabellblRadius_a=new
JLabellblRadius_b=new
JLabellblRadius_c=newtxtEllipsoidRadius_a=newJTextField(8);
txtEllipsoidRadius_b=newJTextField(8);
txtEllipsoidRadius_c=newJTextField(8);
GridBagLayoutgridbag=newGridBagLayout();
typePanel.setLayout(gridbag);
GridBagConstraintsgbc=newGridBagConstraints();typePanel.add(lblRadius_b);
typePanel.add(lblRadius_c);
typePanel.add(txtEllipsoidRadius_a);typePanel.add(txtEllipsoidRadius_b);typePanel.add(txtEllipsoidRadius_c);typePanel.add(lblMeasure);typePanel.add(cmbMeasure);
gbc.insets.top=5;gbc.insets.bottom=5;gbc.insets.left=1;gbc.insets.right=8;
gbc.anchor=GridBagConstraints.WEST;
gbc.gridx=0;
gbc.gridy=0;
gridbag.setConstraints(lblRadius_a,gbc);
gbc.gridx=1;
gbc.gridy=0;
gridbag.setConstraints(txtEllipsoidRadius_a,gbc);
gbc.gridx=0;
gbc.gridy=1;
gbc.gridx=1;
gbc.gridy=1;
gridbag.setConstraints(txtEllipsoidRadius_b,gbc);
gbc.gridx=0;
gbc.gridy=2;
gridbag.setConstraints(lblRadius_c,gbc);
gbc.gridx=1;
gbc.gridy=2;
gridbag.setConstraints(txtEllipsoidRadius_c,gbc);
gbc.gridx=0;
gbc.gridy=3;
gridbag.setConstraints(lblMeasure,gbc);
gbc.grid