科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件深入浅出基于Java的建造设计模式

深入浅出基于Java的建造设计模式

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

GOF给建造模式的定义为:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。可以将建造模式的精髓概括为:将构造复杂对象的过程和对象的部件解耦。

作者:中国IT实验室 来源:中国IT实验室 2007年8月26日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
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);
  }
  
  }
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章