组合设计模式

发布于: 18 小时前

package com.karl.pre.mode.leaf;
import com.karl.pre.mode.Window;
public class Button implements Window {
private String type;
public Button(String type) {
this.type = type;
}
public void exe(){
System.out.println("Button("+this.type+")");
}
public void addWindow(Window window){
}
}

package com.karl.pre.mode.leaf;
import com.karl.pre.mode.Window;
public class CheckBox implements Window {
public void exe(){
System.out.println("CheckBox(复选框)");
}
public void addWindow(Window window){
}
}

package com.karl.pre.mode.leaf;
import com.karl.pre.mode.Window;
import java.util.ArrayList;
import java.util.List;
public class Frame implements Window {
private List<Window> windows = new ArrayList<>();
public void exe(){
System.out.println("Frame(FRAME1)");
for (Window window : windows) {
window.exe();
}
}
public void addWindow(Window window){
windows.add(window);
}
}

package com.karl.pre.mode.leaf;
import com.karl.pre.mode.Window;
public class Lable implements Window {
private String type;
public Lable(String type) {
this.type = type;
}
public void exe(){
System.out.println("Lable("+this.type+")");
}
public void addWindow(Window window){
}
}

package com.karl.pre.mode.leaf;
import com.karl.pre.mode.Window;
public class LinkLable implements Window {
public void exe(){
System.out.println("LinkLable(忘记密码)");
}
public void addWindow(Window window){
}
}

package com.karl.pre.mode.leaf;
import com.karl.pre.mode.Window;
public class PasswordBox implements Window {
public void exe(){
System.out.println("PasswordBox(密码框)");
}
public void addWindow(Window window){
}
}

package com.karl.pre.mode.leaf;
import com.karl.pre.mode.Window;
public class Picture implements Window {
public void exe(){
System.out.println("Picture(LOGO图片)");
}
public void addWindow(Window window){
}
}

package com.karl.pre.mode.leaf;
import com.karl.pre.mode.Window;
public class TextBox implements Window {
private String type;
public TextBox(String type) {
this.type = type;
}
public void exe(){
System.out.println("TextBox("+this.type+")");
}
public void addWindow(Window window){
}
}

package com.karl.pre.mode;
public interface Window {
void exe();
void addWindow(Window window);
}

package com.karl.pre.mode;
import java.util.ArrayList;
import java.util.List;
public class WinForm implements Window{
private List<Window> windows = new ArrayList<>();
public void exe(){
System.out.println("WinForm(WINDOW窗口)");
for (Window window : windows) {
window.exe();
}
}
public void addWindow(Window window){
windows.add(window);
}
}

package com.karl.pre.mode;
import com.karl.pre.mode.leaf.*;
public class WinFormTest {
public static void main(String[] args) {
WinForm winForm = new WinForm();
winForm.addWindow(new Picture());
winForm.addWindow(new Button("登录"));
winForm.addWindow(new Button("注册"));
Frame frame = new Frame();
frame.addWindow(new Lable("用户名"));
frame.addWindow(new TextBox("文本框"));
frame.addWindow(new Lable("密码"));
frame.addWindow(new PasswordBox());
frame.addWindow(new CheckBox());
frame.addWindow(new TextBox("记住用户名"));
frame.addWindow(new LinkLable());
winForm.addWindow(frame);
winForm.exe();
}
}

测试结果:
WinForm(WINDOW窗口)
Picture(LOGO图片)
Button(登录)
Button(注册)
Frame(FRAME1)
Lable(用户名)
TextBox(文本框)
Lable(密码)
PasswordBox(密码框)
CheckBox(复选框)
TextBox(记住用户名)
LinkLable(忘记密码)
Process finished with exit code 0

组合模式要点:

1)组合部件

2)合成部件,装载组合部件

3)叶子节点,组合部件具体实现

使用场景:

1)当想表达对象的部分-整体的层次结构时。

2)希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象时。

用户头像

Karl

关注

还未添加个人签名 2020.02.13 加入

还未添加个人简介

评论

发布
暂无评论
组合设计模式