设计模式(九)合成

类结构和对象结构:

1、抽象组件

public interface View {
	public void draw();
}

2、树叶组件

public class Circle implements View{

	@Override
	public void draw() {
		System.out.print("O");
	}

}
public class Square implements View{

	@Override
	public void draw() {
		System.out.println("口");
	}

}

3、树枝组件

import java.util.ArrayList;

public class LinearLayout implements View{
	
	public static final int HORIZONTAL=0;
	public static final int VERTICAL=1;
	
	private int orientation;
	private ArrayList<View> views=new ArrayList<View>();

	@Override
	public void draw() {
		if(orientation==HORIZONTAL){
			for(View view:views){
				view.draw();
			}
		}else{
			for(View view:views){
				System.out.print("\t");//制表,形成垂直布局的效果
				view.draw();
				System.out.print("\n");//换行
			}
		}
	}
	
	public void add(View view){
		views.add(view);
	}
	
	public void remove(View view){
		views.remove(view);
	}

	public void setOrientation(int orientation) {
		this.orientation = orientation;
	}

}	
	public static final int HORIZONTAL=0;
	public static final int VERTICAL=1;
	
	private int orientation;
	private ArrayList<View> views=new ArrayList<View>();

	@Override
	public void draw() {
		if(orientation==HORIZONTAL){
			for(View view:views){
				view.draw();
			}
		}else{
			for(View view:views){
				System.out.print("\t");//制表,形成垂直布局的效果
				view.draw();
				System.out.print("\n");//换行
			}
		}
	}
	
	public void add(View view){
		views.add(view);
	}
	
	public void remove(View view){
		views.remove(view);
	}

	public void setOrientation(int orientation) {
		this.orientation = orientation;
	}

}

4、消费者

public class Customer{

	public static void main(String[] args) {
		
		Circle circle=new Circle();
		Circle circle2=new Circle();
		Circle circle3=new Circle();
		
		Square square=new Square();
		Square square2=new Square();
		Square square3=new Square();
		
		LinearLayout layoutChild=new LinearLayout();//子布局
		layoutChild.setOrientation(LinearLayout.VERTICAL);//垂直布局
		layoutChild.add(square);
		layoutChild.add(square2);
		layoutChild.add(square3);
		
		LinearLayout layout=new LinearLayout();//父布局,默认水平布局
		layout.add(circle);
		layout.add(circle2);
		layout.add(circle3);
		layout.add(layoutChild);
		
		layout.draw();//绘制整个视图
		
		System.out.println("--------删除子布局的一个树叶节点后---------");
		
		layoutChild.remove(square2);
		layout.draw();//再次绘制整个视图
	}

}

5、运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值