生成器模式

【生成器模式】将一个复杂对象的构建与它的表示分离,使同样的构建过程可以创建不同的表示。

package com.demo.builder;

import javax.swing.JPanel;

//指挥者指挥创建各个组件
public class Director {

	private Builder builder;
	Director(Builder builder){
		this.builder=builder;
	}
	public JPanel constructProduct(){
		builder.buildButton();
		builder.buildLabel();
		builder.buildTextField();
		JPanel product=builder.getPanel();
		return product;
	}
}

package com.demo.builder;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

//具体生成器
public class ConcreteBuilderOne implements Builder {

	//需要创建的容器
	private PanelProduct panel;
	ConcreteBuilderOne(){
		panel=new PanelProduct();
	}
	
	@Override
	public void buildButton() {
		// TODO Auto-generated method stub
		panel.button=new JButton("按钮");
	}

	@Override
	public void buildLabel() {
		// TODO Auto-generated method stub
		panel.label=new JLabel("标签");
	}

	@Override
	public void buildTextField() {
		// TODO Auto-generated method stub
		panel.textField=new JTextField("文本框");
	}

	@Override
	public JPanel getPanel() {
		//添加组件的顺序不同
		panel.add(panel.button);
		panel.add(panel.label);
		panel.add(panel.textField);
		return panel;
	}
}

package com.demo.builder;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Application {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Builder builder=new ConcreteBuilderOne();
		Director director=new Director(builder);
		JPanel panel=director.constructProduct();
		JFrame frameOne=new JFrame();
		frameOne.add(panel);
		frameOne.setBounds(12,12,200,120);
		frameOne.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		frameOne.setVisible(true);
		
		builder=new ConcreteBuilderTwo();
		director=new Director(builder);
		panel=director.constructProduct();
		JFrame frameTwo=new JFrame();
		frameTwo.add(panel);
		frameTwo.setBounds(212,12,200,120);
		frameTwo.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		frameTwo.setVisible(true);
	}
}

猜你喜欢

转载自xiongjiajia.iteye.com/blog/1731316