服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

java的建造设计模式


  分为指导者,抽象建造者,具体建造者
有一个例子

import java.util.*;
import junit.framework.*;

//不同的媒体形式:

class media extends arraylist {}
class book extends media {}
class magazine extends media {}
class website extends media {}

// 不同媒体的组成元素:

class mediaitem {
 private string s;
 public mediaitem(string s) { this.s = s; }
 public string tostring() { return s; }
}

class chapter extends mediaitem {
 public chapter(string s) { super(s); }
}

class article extends mediaitem {
 public article(string s) { super(s); }
}

class webitem extends mediaitem {
 public webitem(string s) { super(s); }
}

// 抽象建造者角色,它规范了所有媒体建造的步骤:

class mediabuilder {
 public void buildbase() {}
 public void addmediaitem(mediaitem item) {}
 public media getfinishedmedia() { return null; }
}

//具体建造者角色

class bookbuilder extends mediabuilder {
 private book b;
 public void buildbase() {
  system.out.println("building book framework");
  b = new book();
 }

 public void addmediaitem(mediaitem chapter) {
  system.out.println("adding chapter " + chapter);
  b.add(chapter);
 }
 public media getfinishedmedia() { return b; }
}

class magazinebuilder extends mediabuilder {
 private magazine m;
 public void buildbase() {
  system.out.println("building magazine framework");
  m = new magazine();
 }

 public void addmediaitem(mediaitem article) {
  system.out.println("adding article " + article);
  m.add(article);
 }
 public media getfinishedmedia() { return m; }
}

class websitebuilder extends mediabuilder {
 private website w;
 public void buildbase() {
  system.out.println("building web site framework");
  w = new website();
 }

 public void addmediaitem(mediaitem webitem) {
  system.out.println("adding web item " + webitem);
  w.add(webitem);
 }

 public media getfinishedmedia() { return w; }
}

//指导者角色,也叫上下文
class mediadirector {
 private mediabuilder mb;
 public mediadirector(mediabuilder mb) {
  this.mb = mb; //具有策略模式相似特征的
 }

 public media producemedia(list input) {
  mb.buildbase();
  for(iterator it = input.iterator(); it.hasnext();)
   mb.addmediaitem((mediaitem)it.next());
   return mb.getfinishedmedia();
 }
};

//测试程序――客户程序角色

public class buildmedia extends testcase {
 private list input = arrays.aslist(new mediaitem[] {
  new mediaitem("item1"), new mediaitem("item2"),
  new mediaitem("item3"), new mediaitem("item4"),
 });

 public void testbook() {
  mediadirector buildbook = new mediadirector(new bookbuilder());
  media book = buildbook.producemedia(input);
  string result = "book: " + book;
  system.out.println(result);
  assertequals(result, "book: [item1, item2, item3, item4]");
 }

 public void testmagazine() {
  mediadirector buildmagazine = new mediadirector(new

magazinebuilder());
  media magazine = buildmagazine.producemedia(input);
  string result = "magazine: " + magazine;
  system.out.println(result);
  assertequals(result, "magazine: [item1, item2, item3, item4]");
 }

 public void testwebsite(){
  mediadirector buildwebsite = new mediadirector(new

websitebuilder());
  media website = buildwebsite.producemedia(input);
  string result = "web site: " + website;
  system.out.println(result);
  assertequals(result, "web site: [item1, item2, item3, item4]");
 }

 public static void main(string[] args) {
  junit.textui.testrunner.run(buildmedia.class);
 }

}

扫描关注微信公众号