架构 1 期第三周作业一

用户头像
道长
关注
发布于: 2020 年 09 月 28 日

1、手写单例模式





2、组合设计模式打印窗口组件

类图设计
示例代码
/**
* 组件接口
*/
public interface Component {
String name();
ComponentPrinter getComponentPrinter();
}
/**
* 容器组件:具有子元素的组件
*/
public interface ContainerComponent extends Component {
List<Component> getChildList();
void addChildComponent(Component child);
}
//组件打印器 接口
public interface ComponentPrinter{
void print(Component component);
}
//默认打印器
public class DefaultComponentPrinter implements ComponentPrinter {
@Override
public void print(Component component) {
//打印component的name
doPrint(component.name());
//如果是容器组件,遍历子元素打印
if (component instanceof ContainerComponent) {
List<Component> childList = ((ContainerComponent) component).getChildList();
if (childList != null) {
for (Component item : childList) {
//调用组件自身打印器 打印
item.getComponentPrinter().print(item);
}
}
}
}
/**
* 执行打印
*/
private void doPrint(String content) {
System.out.println("print " + content);
}
}
/**
* 组件 抽象实现类
*/
public abstract class BaseComponent implements Component {
protected String name;
protected ComponentPrinter componentPrinter;
public BaseComponent(String name) {
this.name = name;
this.componentPrinter = new DefaultComponentPrinter();
}
public BaseComponent() {
}
@Override
public String name() {
return this.getClass().getSimpleName() + "(" + name + ")";
}
@Override
public ComponentPrinter getComponentPrinter() {
return componentPrinter;
}
}
/**
* 容器组件 抽象实现类
*/
public abstract class BaseContainerComponent extends BaseComponent implements ContainerComponent {
protected List<Component> childList;
public BaseContainerComponent(String name) {
super(name);
this.childList = new ArrayList<>();
}
@Override
public List<Component> getChildList() {
return childList;
}
@Override
public void addChildComponent(Component child) {
if (childList == null) {
childList = new ArrayList<>();
}
childList.add(child);
}
}
/**
* 窗口组件-is a 容器组件
*/
public class WinForm extends BaseContainerComponent {
public WinForm(String name) {
super(name);
}
}
/**
* 按钮 是一个组件
*/
public class Button extends BaseComponent {
public Button(String name) {
super(name);
}
}

以上是组件的实现。定义Component接口代表基础组件,定义ContainerComponent接口代表 容器组件,可以拥有子组件列表。





public static void main(String[] args) {
ContainerComponent windowForm = new WinForm("WINDOW窗口");
Component picture = new Picture("LOGO图片");
windowForm.addChildComponent(picture);
//windowForm添加子组件
Component loginButton = new Picture("登录");
windowForm.addChildComponent(loginButton);
ContainerComponent frame = new Frame("FRAME1");
//windowForm 添加 Frame 容器组件
windowForm.addChildComponent(frame);
//...省略其他代码
Component textBook2 = new TextBox("记住用户名");
//Frame添加子组件
frame.addChildComponent(textBook2);
//执行打印
windowForm.getComponentPrinter().print(windowForm);
}

输出结果:

print WinForm(WINDOW窗口)
print Picture(LOGO图片)
print Picture(登录)
print Picture(注册)
print Frame(FRAME1)
print Label(用户名)
print TextBox(文本框)
print Label(密码)
print PasswordBox(密码框)
print CheckBox(复选框)
print TextBox(记住用户名)
print LinkLable(忘记密码)



用户头像

道长

关注

还未添加个人签名 2018.03.11 加入

还未添加个人简介

评论

发布
暂无评论
架构1期第三周作业一