软件世界网 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
移动开发 架构设计 编程语言 Web前端 互联网
开发杂谈 系统运维 研发管理 数据库 云计算 Android开发资料
  软件世界网 -> 开发杂谈 -> 生成器模式 -> 正文阅读

[开发杂谈]生成器模式


生成器模式:将一个复杂对象的构建与它的表示分离,使同样的构建过程可以创建不同的表示(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类:
[img]http://common.cnblogs.com/images/copycode.gif
 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 }

[img]http://common.cnblogs.com/images/copycode.gif
Builder 接口:
[img]http://common.cnblogs.com/images/copycode.gif
 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 }

[img]http://common.cnblogs.com/images/copycode.gif
ConcreteBuilder 如下两个类(ConcreteBuilderOne和ConcreteBuilderTwo):
[img]http://common.cnblogs.com/images/copycode.gif
 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 }

[img]http://common.cnblogs.com/images/copycode.gif
Director类:
[img]http://common.cnblogs.com/images/copycode.gif
 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 }

[img]http://common.cnblogs.com/images/copycode.gif
下面是测试代码:
[img]http://common.cnblogs.com/images/copycode.gif
 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 }

[img]http://common.cnblogs.com/images/copycode.gif
 
 
人生最可贵的事情是sb似的坚持于追求……
......显示全文...
    点击查看全文


上一篇文章      下一篇文章      查看所有文章
2016-04-03 20:46:48  
开发杂谈 最新文章
BloomFilter
大学四年编程之历程
内核分析
造人论坛——意识的本质和一个人工脑模型
OFDM信号[matlab描述]
人类还会进化吗?
HDUACM1035RobotMotion简单模拟题
树、二叉树(二)
iisphpweb.config处理404,500等,跳转友好
DatabaseAsaFortress
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 美食菜谱 新闻资讯 电影视频 小游戏 Chinese Culture 股票 租车
生肖星座 三丰软件 视频 开发 短信 中国文化 网文精选 搜图网 美图 阅读网 多播 租车 短信 看图 日历 万年历 2018年1日历
2018-1-17 14:57:09
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  软件世界网 --