生成器模式

生成器模式

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。


一 、 概述

当系统准备为用户提供一个内部结构复杂的对象时,就可以使用生成器模式,使用该模式可以逐步地构造对象,使得对象的创建更具弹性。生成器模式的关键是将一个包含有多个组件对象的创建分成若干个步骤,并将这些步骤封装在一个称作生成器的接口中

二、生成器模式的结构与使用 

模式的结构中包括四种角色:

产品( Product
抽象生成器( Builder
具体生成器( ConcreteBuilder
指挥者( Director
模式UML类图、

1.产品(Product: PanelProduct.java

import javax.swing.*;

public class PanelProduct extends JPanel{

  JButton button;

  JLabel label;               

  JTextFieldtextField;

}

2.抽象生成器(Builder: Builer.java

import.javax.swing.*;

public interface Builder{

    public abstractvoid buildButton();

    public abstractvoid buildLabel();

    public abstractvoid buildTextField();

    public abstract JPanelgetPanel();

}

3.具体生成器(ConcreteBuilder_1:ConcreteBuilderOne.java

import javax.swing.*;

public class ConcreteBuilderOne implementsBuilder{

      private PanelProduct panel;     

      ConcreteBuilderOne(){

            panel=new PanelProduct();

      }

      public void buildButton(){

            panel.button=new JButton("按钮");

      }

      public void buildLabel(){

           panel.label=new JLabel("标签");

      }

      public void buildTextField(){

           panel.textField=new JTextField("文本框");

      }

      public JPanel  getPanel(){

           panel.add(panel.button);

           panel.add(panel.label);

           panel.add(panel.textField);

           return panel;

      }

}

3.具体生成器(ConcreteBuilder_2:ConcreteBuilderTwo.java

import javax.swing.*;

public class ConcreteBuilderTwo implementsBuilder{

      private PanelProduct panel;      

      ConcreteBuilderTwo(){

            panel=new PanelProduct();

      }

      public void buildButton(){

            panel.button=new JButton("button");

      }

      public void buildLabel(){

           panel.label=new JLabel("label");

      }

      public void buildTextField(){

           panel.textField=new JTextField("textField");

      }

      public JPanel  getPanel(){

            panel.add(panel.textField);

            panel.add(panel.label);

            panel.add(panel.button);

            return panel;

      }

}

4.指挥者(Director:Director.java

import javax.swing.*;

public class Director{

   private Builder builder;

   Director(Builder builder){

      this.builder=builder;

   }

   public JPanelconstructProduct(){

      builder.buildButton();

      builder.buildLabel();

      builder.buildTextField();

      JPanel product=builder.getPanel();

      return product;

  }

}

5.应用 Application.java

import javax.swing.*;

public classApplication{

    public static void main(String args[]){

       Builder builder=new ConcreteBuilderOne();

       Director director=newDirector(builder);

       JPanel panel=director.constructProduct();

       JFrameframeOne=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();

       JFrameframeTwo=new JFrame();

       frameTwo.add(panel);

       frameTwo.setBounds(212,12,200,120);

       frameTwo.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

       frameTwo.setVisible(true);

    }

}

三、生成器模式的优点 

生成器模式将对象的构造过程封装在具体生成器中,用户使用不同的具体生成器就可以得到该对象的不同表示。
生成器模式将对象的构造过程从创建该对象的类中分离出来,使得用户无须了解该对象的具体组件。
可以更加精细有效地控制对象的构造过程。生成器将对象的构造过程分解成若干步骤,这就使得程序可以更加精细,有效地控制整个对象的构造。
生成器模式将对象的构造过程与创建该对象类解耦,使得对象的创建更加灵活有弹性。
当增加新的具体生成器时,不必修改指挥者的代码,即该模式满足开 - 闭原则
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值