组合模式的实例

本文介绍了组合模式的基础学习,通过一个实例展示了如何使用安全模式实现组合模式。文章中提到的UML图帮助理解了组合模式的层级关系。作者强调了在实现过程中,虽然组合模式能有效工作,但客户端需要了解真实的容器组件。为了改进,提出了为容器控件添加一个自显示方法selfshow(),以避免直接暴露内部组件,并给出了实现思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

练习

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

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


按照层级关系实现代码

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<IComponent> 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(),然后子类重写就可以了哦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值