首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java生成器方式

2012-09-06 
java生成器模式UML图:??? 产品:??? PanelProduct.javapackage Builderimport javax.swing.*public class

java生成器模式

UML图:
java生成器方式

??? 产品:
??? PanelProduct.java

package Builder;import javax.swing.*;public class PanelProduct extends JPanel {   JButton button;   JLabel label;   JTextField textField;}

??? 抽象生成器:

??? Builder.java

import javax.swing.JPanel;//抽象生成器public interface Builder {      public abstract void buildButton();      public abstract void buildLable();      public abstract void buildTextField();      public abstract JPanel getPanel();}

?? 具体生成器:

?

package Builder;import javax.swing.*;public class ConcreteBuilderOne implements Builder {      private PanelProduct panel;      ConcreteBuilderOne() {            panel = new PanelProduct();      }      @Override      public void buildButton() {            panel.button = new JButton("按钮");      }      @Override      public void buildLable() {            panel.label = new JLabel("标签");      }      @Override      public void buildTextField() {            panel.textField = new JTextField("文本框");      }      @Override      public JPanel getPanel() {            panel.add(panel.button);            panel.add(panel.label);            panel.add(panel.textField);            return panel;      }}package Builder;import javax.swing.*;public class ConcreteBuilderTwo implements Builder {    private PanelProduct pannel;//需要具体容器      public ConcreteBuilderTwo() {            pannel=new PanelProduct();      }      @Override      public void buildButton() {            pannel.button=new JButton("button");      }      @Override      public void buildLable() {            pannel.label=new JLabel("label");      }      @Override      public void buildTextField() {            pannel.textField=new JTextField("textField");      }      @Override      public JPanel getPanel() {            pannel.add(pannel.textField);            pannel.add(pannel.label);            pannel.add(pannel.button);            return pannel;      }}

??? 指挥者:

?

package Builder;import javax.swing.JPanel;//指挥者public class Director {      private Builder builder;      public Director(Builder builder) {            this.builder = builder;      }      public JPanel constructProduct() {            builder.buildButton();            builder.buildLable();            builder.buildTextField();            JPanel product = builder.getPanel();            return product;      }}

??? 模式使用:

?

package Builder;import javax.swing.*;public class Application {      public static void main(String[] args) {            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();            frameOne = new JFrame();            frameOne.add(panel);            frameOne.setBounds(212, 12, 200, 120);            frameOne.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);            frameOne.setVisible(true);      }}
?

?

热点排行