某软件公司要开发一个界面控件库,界面控件分为两大类,一类是单元控件,例如按钮、文本框等,一类是容器控件,例如窗体、中间面板等,试用组合模式设计该界面控件库,画出类图即可。
第一步,定义抽象组件类:抽象构件类(Component)20软2
public abstract class Component
{
public abstract void add(Component component);
public abstract void remove(Component component);
public abstract Component getChild(int i);
public abstract void display();
}
第二步,定义具体按钮组件类:具体叶子构件类(Button)
public class Button extends Component
{
private String name;
public Button(String name)
{
this.name=name;
}
public void add(Component component) {
}
public void remove(Component component) {
}
public Component getChild(int i) {
return null;
}
public void display()
{
System.out.println("按钮显示:"+this.name);
}
}
第三步,定义具体文本框组件类:具体叶子构件类(TextBox)
public class TextBox extends Component
{
private String name;
public TextBox(String name)
{
this.name=name;
}
public void add(Component component) {}
public void remove(Component component) {}
public Component getChild(int i) {
return null;
}
public void display()
{
System.out.println("文本框显示:"+this.name);
}
}
第四步,定义具体容器组件类:具体容器构件类(Container)
import java.util.ArrayList;
public class Container extends Component {
private String name;
private ArrayList<Component> componentList = new ArrayList<>();
public Container(String name) {
this.name = name;
}
public void add(Component component) {
this.componentList.add(component);
}
public void remove(Component component) {
this.componentList.remove(component);
}
public Component getChild(int i) {
return this.componentList.get(i);
}
public void display() {
for (Component component : this.componentList) {
component.display();
}
}
}
第五步,定义用户测试类(Client)
public static void main(String[] args) {
Component button, textBox, form, panel;
form = new Container("窗体");
panel = new Container("中间面板");
button = new Button("按钮");
textBox = new TextBox("文本框");
panel.add(button);
panel.add(textBox);
form.add(panel);
form.display();
}
测试结果: