java实现Composite(组合)模式

组合模式涉及的是一组对象,其中一些对象可能含有其他对象,这些对象也可以含有对象,因此,有些对象代表的是对象群组。
Composite模式的设计意图在于:让所有的用户能够用统一的接口处理单个对象以及对象群组
package app.composite;

import java.util.ArrayList;
import java.util.Iterator;
/**
 * 类的作用:存在年级和学校,都实现People接口,有输出名字的功能,实现组合模式
 * 调用School的getName();获取全校学生的名字
 * @author Administrator
 *
 */
public class CompositeTest {
	public static void main(String[] args) {
		School school=new School("前途小学");
		Grade grade1=new Grade("一年级");
		grade1.add(new Student("小明"));
		grade1.add(new Student("小红"));
		Grade grade2=new Grade("二年级");
		grade2.add(new Student("小亮"));
		grade2.add(new Student("小华"));
		school.add(grade1);
		school.add(grade2);
		school.getName();
	}
}
//学校
interface People{
	public void getName();//获得
}
class Student implements People{
	String name;
	public Student(String name){
		this.name=name;
	}
	@Override
	public void getName() {
		System.out.println(this.name);
	}
}
class Grade implements People{//年级
	private String gradeName; //年级名字
	public Grade(String name){
		this.gradeName=name;
	}
    private ArrayList studentList =new ArrayList(); 
	public void add(Student s){
		this.studentList.add(s);
	}
	@Override
	public void getName() {
		System.out.println("年级:"+this.gradeName);
		Iterator it=studentList.iterator();
		while(it.hasNext()){
			Student student=(Student)it.next();
			student.getName();
		}
		System.out.println();
	}
}
class School implements People{
	public String schoolName;
	public School (String name){
		this.schoolName=name;
	}
	private ArrayList gradeList =new ArrayList(); 
	public void add(Grade g){
		this.gradeList.add(g);
	}
	@Override
	public void getName() {
		System.out.println("学校:"+this.schoolName);
		Iterator it=gradeList.iterator();
		while(it.hasNext()){
			Grade g=(Grade)it.next();
			g.getName();
		}
	}
	
}

 运行结果

学校:前途小学
年级:一年级
小明
小红

年级:二年级
小亮
小华

 

转载于:https://www.cnblogs.com/lzzhuany/p/4896265.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java实现图片透明效果,从演示截图可看到,上层图片与下层图片互相重叠,也就是上层图片透明了,看到了下层以的图片,具体的代码实现:   public class HalfTransparentImageDemo extends JFrame {    private Container content = getContentPane(); //获得窗口的容器    private JSlider jSlider = new JSlider(JSlider.HORIZONTAL,0,100,75); //改变图像的透明度    DisplayPanel displayPanel = new DisplayPanel(); //显示图形面板    public HalfTransparentImageDemo() {    super("半透明图片"); //调用父构造器    jSlider.setPaintTicks(true); //绘制标志位    jSlider.setMajorTickSpacing(25); //设置标志尺寸    jSlider.setMinorTickSpacing(5);    jSlider.setPaintLabels(true); //绘制出数字    jSlider.setBorder(new TitledBorder(BorderFactory.createEmptyBorder(), "图像的透明度(%)")); //设置边框    jSlider.addChangeListener(new ChangeListener() { //滑动条jSlider事件处理    public void stateChanged(ChangeEvent ce) {    float alpha =((float) ((JSlider) ce.getSource()).getValue()) / 100;    displayPanel.alpha = alpha; //改变图像的透明度    displayPanel.repaint(); //重绘displayPanel    }    g2d.drawImage(bufImage1, 0, 0, this); //在图形环境绘制缓冲区图像1    g2d.drawString("Destination",5,20); //绘制文字    int compositeRule = AlphaComposite.SRC_OVER; //源排斥目标法合成规则    AlphaComposite alphaComposite=AlphaComposite.getInstance(compositeRule,alpha); //创建AlphaComposite对象    g2d.setComposite(alphaComposite); //设置图形环境的合成方式    g2d.drawImage(bufImage2, 0, 0, this); //在图形环境绘制缓冲区图像2    g2d.drawString("Source",150,20); //绘制文字    }
Java实现多个设计模式组合是非常常见的,在这里我将以组合模式和装饰器模式为例进行介绍。 首先,组合模式是一种结构型模式,它将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。在实现组合模式时,我们需要定义一个抽象的组件(Component),它可以是一个抽象或接口,并且包含了一些公共的方法和属性。然后,我们定义一个叶子节点(Leaf),它实现了组件(Component)的方法。最后,我们定义一个组合节点(Composite),它也实现了组件(Component)的方法,并且包含了一个子节点列表,用于存储其子节点。这样,我们就可以通过组合节点(Composite)来表示整个树形结构。 其次,装饰器模式是一种结构型模式,它允许我们动态地给一个对象添加一些额外的职责,而不需要修改其原始。在实现装饰器模式时,我们需要定义一个抽象的组件(Component),它可以是一个抽象或接口,并且包含了一些公共的方法和属性。然后,我们定义一个具体的组件(ConcreteComponent),它实现了组件(Component)的方法。最后,我们定义一个装饰器(Decorator),它也实现了组件(Component)的方法,并且包含了一个指向组件(Component)的引用。这样,我们就可以通过装饰器(Decorator)来动态地为组件(Component)添加额外的职责。 为了实现多个设计模式组合,在 Java 中,我们可以通过将装饰器(Decorator)作为组合节点(Composite)的子实现。具体地,我们可以定义一个装饰器组合节点(DecoratorComposite),它继承了组合节点(Composite),并且包含了一个指向装饰器(Decorator)的引用。这样,我们就可以通过装饰器组合节点(DecoratorComposite)来同时实现组合模式和装饰器模式的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值