组合模式的实例

基础组合模式的学习:http://blog.csdn.net/lovelion/article/details/7956962

 

练习

Sunny软件公司欲开发一个界面控件库,界面控件分为两大类,一类是单元控件,例如按钮、文本框等,一类是容器控件,例如窗体、中间面板等,试用组合模式设计该界面控件库。

这里是UML图,采用的是组合模式中的安全模式,实现的效果的确是可以,缺点就是客户端需要知道真实的容器组件,代码是java组合模式的实例_第1张图片


按照层级关系实现代码

package composite;

import java.util.ArrayList;

import javax.swing.DebugGraphics;

interface IComponent{
	void show();
}
abstract class Single implements IComponent{
	//一些其他的通用属性
	//其他方法:比如绘制方法
	public abstract void show() ;
}
abstract class SingleContent implements IComponent{
	private ArrayList singlelist = new ArrayList<>();
	public void show(){
		for (IComponent iComponent : singlelist) {
			iComponent.show();
		}
	}
	public IComponent add(IComponent ic){
		singlelist.add(ic);
		return ic;
	}
	public void remove(IComponent ic){
		singlelist.remove(ic);
	}
}
class Button extends Single{

	@Override
	public void show() {
		// TODO 自动生成的方法存根
	    System.out.println("绘制按钮成功");
	}
	
}
class CheckBox extends Single{

	@Override
	public void show() {
		// TODO 自动生成的方法存根
		System.out.println("绘制选择栏成功");
	}
	
}
class Window extends SingleContent{}
class CenterPanel extends SingleContent{}

客户端代码:

package composite;

public class Client {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		Single s1, s2;
		SingleContent c1, c2;
		s1 = new Button();
		s2 = new CheckBox();
		c1 = new Window();
		c2 = new CenterPanel();
		c1.add(s1);
		c1.add(c2);
		c1.add(s2);
		c2.add(s1);
		c2.add(s2);
		c1.show();
		s1.show();
	}

}

可以扩展的工作:

作为一个容器控件,他本身除了显示内部的控件外,还应该可以显示自己,我们直接给他自身扩展一个方法显示方法selfshow,然后再遍历子类之前先显示他自己,并将它自己添加到显示集合就可以了,如果大家有兴趣德华,可以实现哦

就是给SIngleContext声明一个抽象方法selfshow(),然后子类重写就可以了哦

你可能感兴趣的:(设计模式)