生成器模式:将一个复杂对象的构建与它的表示分离,使同样的构建过程可以创建不同的表示(Separate the construction of a complex object from its representation so that the same construction process can create different representations)。
生成器模式结构中的四种角色。
产品(Product): 所要构建的复杂对象。
抽象生成器(Builder): 抽象生成器是一个接口,该接口除了为创建一个Product对象的各个组件定义若干个方法外,还要定义返回Product对象的方法。
具体生成器(ConcreteBuilder): 实现Buidler接口的类。
指挥者(Director): 指挥者是一个类,该类需含有Builder接口申明的变量,指挥者的职责是负责向用户提供具体的生成器,利用具体生成器构造复杂的Product对象。
代码如下:
Product类:
1 package cn.zj.qiao.designPattern.builder; 2 3 import javax.swing.JButton; 4 import javax.swing.JLabel; 5 import javax.swing.JPanel; 6 import javax.swing.JTextField; 7 8 public class PanelProduct extends JPanel { 9 /** 10 * 11 */ 12 private static final long serialVersionUID = 1L; 13 JButton button; 14 JLabel label; 15 JTextField textField; 16 }
Builder 接口:
1 package cn.zj.qiao.designPattern.builder; 2 3 import javax.swing.JButton; 4 import javax.swing.JLabel; 5 import javax.swing.JPanel; 6 import javax.swing.JTextField; 7 8 public class PanelProduct extends JPanel { 9 /** 10 * 11 */ 12 private static final long serialVersionUID = 1L; 13 JButton button; 14 JLabel label; 15 JTextField textField; 16 }
ConcreteBuilder 如下两个类(ConcreteBuilderOne和ConcreteBuilderTwo):
1 package cn.zj.qiao.designPattern.builder; 2 3 4 import javax.swing.JButton; 5 import javax.swing.JLabel; 6 import javax.swing.JPanel; 7 import javax.swing.JTextField; 8 9 public class ConcreteBuilderOne implements Builder { 10 private PanelProduct panel; //创建需要的容器 11 12 ConcreteBuilderOne(){ 13 panel = new PanelProduct(); 14 } 15 @Override 16 public void buildButton() { 17 panel.button = new JButton("btn"); 18 19 } 20 21 @Override 22 public void buildLabel() { 23 panel.label = new JLabel("lable"); 24 25 } 26 27 @Override 28 public void buildTextField() { 29 panel.textField = new JTextField("hello"); 30 31 } 32 33 @Override 34 public JPanel getPanel() { 35 panel.add(panel.button); 36 panel.add(panel.label); 37 panel.add(panel.textField); 38 return panel; 39 } 40 41 } 42 43 44 package cn.zj.qiao.designPattern.builder; 45 46 import javax.swing.JButton; 47 import javax.swing.JLabel; 48 import javax.swing.JPanel; 49 import javax.swing.JTextField; 50 51 public class ConcreteBuilderTwo implements Builder { 52 private PanelProduct panel; 53 54 ConcreteBuilderTwo(){ 55 panel = new PanelProduct(); 56 } 57 @Override 58 public void buildButton() { 59 panel.button = new JButton("btn"); 60 61 } 62 63 @Override 64 public void buildLabel() { 65 panel.label = new JLabel("label"); 66 67 } 68 69 @Override 70 public void buildTextField() { 71 panel.textField = new JTextField("helo"); 72 73 } 74 75 @Override 76 public JPanel getPanel() { 77 panel.add(panel.textField); 78 panel.add(panel.label); 79 panel.add(panel.button); 80 return panel; 81 } 82 83 }
Director类:
1 package cn.zj.qiao.designPattern.builder; 2 3 import javax.swing.JPanel; 4 5 public class Director { 6 private Builder builder; 7 8 Director(Builder builder){ 9 this.builder = builder; 10 } 11 12 public JPanel constructProduct(){ 13 builder.buildButton(); 14 builder.buildLabel(); 15 builder.buildTextField(); 16 return builder.getPanel(); 17 } 18 }
下面是测试代码:
1 package cn.zj.qiao.designPattern.builder; 2 3 import java.awt.Container; 4 5 import javax.swing.JFrame; 6 import javax.swing.JPanel; 7 8 public class Application { 9 public static void main(String[] args){ 10 Builder builder = new ConcreteBuilderOne(); 11 Director dir = new Director(builder); 12 JPanel panel = dir.constructProduct(); 13 JFrame frameOne = new JFrame("hello"); 14 Container con = frameOne.getContentPane(); 15 con.add(panel); 16 frameOne.setBounds(12, 12, 200, 120); 17 frameOne.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 18 frameOne.setVisible(true); 19 20 builder = new ConcreteBuilderTwo(); 21 dir = new Director(builder); 22 panel = dir.constructProduct(); 23 JFrame frameTwo = new JFrame("hello"); 24 con = frameTwo.getContentPane(); 25 con.add(panel); 26 frameTwo.setBounds(222, 12, 200, 120); 27 frameTwo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 28 frameTwo.setVisible(true); 29 30 } 31 }
相关推荐
生成器模式(Builder Pattern)是一种创造型设计模式,它将一个复杂对象的构建与它的表示分离,使得同样的构建可以创建不同的表示。这种模式可以在以下情况下使用: 1. 当创建复杂对象的算法应该独立于该对象的组成...
生成器模式(Builder Pattern)是Java设计模式中的创建型模式之一,主要解决复杂对象的构建问题,通过将构造过程逐步分解,使得构造过程与表示分离,使得同样的构建过程可以创建不同的表示。这种模式通常用于创建...
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...
" JAVA 设计模式概述" JAVA 设计模式是指在软件设计过程中,为了提高代码的可维护性、灵活性和可扩展性所使用的一些惯用解决方案。JAVA 设计模式可以分为三种:创建模式、结构模式和行为模式。 1. 创建模式 创建...
在《Java设计模式》这本书的模拟试题及其参考答案中,涉及了多条设计模式的知识点,以及它们的应用场景和实现方法。现在将这些知识点详细地解释如下: 1. 开闭原则(Open-Closed Principle, OCP): 开闭原则是面向...
"韩顺平_Java设计模式笔记" 本资源摘要信息是对《韩顺平_Java设计模式笔记.docx》的总结和分析,该笔记涵盖了 Java 设计模式的基础知识、设计模式的七大原则、原型设计模式、解释器设计模式、单例设计模式等内容,...
**Java设计模式手册** 在软件开发领域,设计模式是一种经过时间考验、被广泛接受的解决方案模板,用于解决在编程过程中经常遇到的问题。特别是在Java这样的面向对象语言中,设计模式是提高代码可重用性、可读性和可...
而《java设计模式讲解.ppt》可能是对这些模式的详细解读,可能包括每个模式的定义、UML类图、实现示例以及如何在Java项目中应用它们。例如,单例模式确保一个类只有一个实例,常用于配置管理或线程池;工厂方法模式...
本项目“java 设计模式之绘图程序”旨在通过实际应用来讲解和演示几种核心的设计模式,包括简单工厂模式、桥接模式、装饰模式、策略模式、原型模式以及单例模式。这些模式都是软件工程中的重要概念,对于提升代码的...
Java代码积累:并发 设计模式 数据结构 使用容器 实用 类 基础知识 并发性 演示线程的生命周期 生产者-消费者 设计模式参考《大话设计模式》 工厂简单模式 创造型模式 工厂方法模式 抽象工厂模式 原型模式 建造者...
Java设计模式精解 在软件开发中,设计模式是一种经过时间考验、被广泛接受的解决方案模板,用于解决常见的设计问题。Java设计模式是面向对象编程领域的重要组成部分,它提供了可复用的、高效的代码设计蓝图。本文将...
java23种设计模式,每一种模式都有详细的讲解,很全面,如果你想深入了解一下java23种设计模式,这会非常适合你的哦!上传乃为百度云连接,失效请留言。 内容: 001策略模式! N. B8 ~' D! f9 j+ g0 I 002观察者模式 ...
【标题】"简单的Java代码生成器"涉及到的是Java编程领域中的自动化工具,它主要用于简化开发者编写重复性代码的过程。在软件开发中,特别是在Java企业级应用开发中,大量的代码是相似或者重复的,如数据库访问层...
### Java设计模式详解 #### 一、引言 自从J2EE(Java 2 Enterprise Edition)的出现,Java的企业级应用程序开发得到了极大的简化。然而,随着J2EE在各行各业中的广泛应用,开发人员逐渐意识到需要一种更为系统化的...
Java设计模式是面向对象编程中的重要概念,它们是解决常见编程问题的经验总结,为软件开发提供了可重用的解决方案。本资料包含23种经典的Java设计模式,每种模式都有对应的PPT讲解和源码实现,是深入理解和应用设计...
### Java设计模式与原理 #### 一、概述 在软件工程领域,设计模式是指在特定情境下解决软件设计问题的最佳实践。《Java 设计模式与原理》这本书被誉为Java程序员的必备指南之一,它深入浅出地讲解了23种经典的设计...
【标签】"jsp|java设计类"揭示了该代码生成器可能涉及到的技术栈。JSP(JavaServer Pages)是一种动态网页技术,用于生成HTML或XML等Web内容。这意味着生成的代码可能包括JSP页面,用于展示数据或处理用户交互。而...
Java设计模式面试题汇总 本文将对Java设计模式面试题进行总结,涵盖软件设计原则、设计模式的定义、分类、常见模式等内容。 软件设计原则: 软件设计原则是指在软件设计中需要遵守的一些规则和原则,这些原则可以...
### JAVA设计模式详解 #### 一、引言:学习GOF设计模式的重要性 设计模式是在软件工程领域中解决常见问题的一系列解决方案。Gang of Four(GOF)的经典著作《设计模式:可复用面向对象软件的基础》为软件开发者...