zoukankan      html  css  js  c++  java
  • Java建造者模式

    什么是建造者模式:建造者模式是设计模式的一种,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

    建造者模式优点:
    - 在建造者模式中,客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,相同的建造过程可以创建不同的产品对象
    - 使用的不同的具体建造者就可以得到不同的产品对象,具体建造者之间相互独立
    - 可以更加惊喜的控制产品的创建过程
    - 增加新的具体建造者无需修改原有的类库代码,指挥者类针对抽象建造者类编程,符合“开闭原则”

    在这样的设计模式中,有以下几个角色:
    1 builder:为创建一个产品对象的各个部件指定抽象接口。
    2 ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并 提供一个检索产品的接口。
    3 Director:构造一个使用Builder接口的对象。
    4 Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

                          

    例子:比喻我们构建一个人类

    public class Human {
    private String head; //头部
    private String body; //身体
    private String hand; //手
    private String foot; //脚

    public String getHead() {
    return head;
    }

    public void setHead(String head) {
    this.head = head;
    }

    public String getBody() {
    return body;
    }

    public void setBody(String body) {
    this.body = body;
    }

    public String getHand() {
    return hand;
    }

    public void setHand(String hand) {
    this.hand = hand;
    }

    public String getFoot() {
    return foot;
    }

    public void setFoot(String foot) {
    this.foot = foot;
    }
    }

    接口:一个定义了造人标准的接口

    /*
    看,一个接口定义好了。有各种造部位的方法,最后给个createHuman方法给你返回一个我们想要造的人。
    
    现在,人的类和造人的标准我们都定义好了。那我们可以先造一个人出来,先造一个高智商的人吧。
    */
    
    //一个接口。一个定义了造人标准的接口。
    public interface IBuildHuman {
      public void buildHead();
      public void buildBody();
      public void buildHand();
      public void buildFoot();
      public Human createHuman();
    }
    看,一个接口定义好了。有各种造部位的方法,最后给个createHuman方法给你返回一个我们想要造的人。
    现在,人的类和造人的标准我们都定义好了。那我们可以先造一个人出来,先造一个高智商的人吧。
     
     
     //实现接口
    /*
    这个高智商的造人过程自然是实现了IBuildHuman这个造人标准的接口了。然后就是set方法,最后返回造好的human。
    */
    public class SmartManBuilder implements IBuildHuman {
    
    Human human;
    public SmartManBuilder() {
      human = new Human();
    }
    
    @Override
    public void buildHead() {
      human.setHead("智商180的头脑");
    }
    
    @Override
    public void buildBody() {
      human.setBody("新的身体");
    }
    
    @Override
    public void buildHand() {
      human.setHand("新的手");
    }
    
    @Override
    public void buildFoot() {
      human.setFoot("新的脚");
    }
    
    @Override
    public Human createHuman() {
      return human;
      }
    }

    这个高智商的造人过程自然是实现了IBuildHuman这个造人标准的接口了。然后就是set方法,最后返回造好的human。

    创建一个director类

    /*
    好的,其实到这里呢,我们已经完成了建造的过程。那就这么简单的建造过程,还搞了一个建造模式吗?非也。
    接下来,就是介绍建造者模式的精髓,那就是director。
    这个director呢,就是来执行我们刚才的造人动作的。没错,精髓就是我们刚才的造人动作。我们先看代码:
    */
    public class Director {
    public Human createHumanByDirecotr(IBuildHuman bh){
      bh.buildBody();
      bh.buildFoot();
      bh.buildHand();
      bh.buildHead();
      return bh.createHuman();
      }
    }

    //创建BuilderTest类

    public class BuilderTest {
    public static void main(String[] args) {
      Director director
    = new Director();   Human human =director.createHumanByDirecotr(new SmartManBuilder());   System.out.println(human.getBody());   System.out.println(human.getFoot());   System.out.println(human.getHand());   System.out.println(human.getHead());   }
    }

    结果:

  • 相关阅读:
    【11.3】
    WPF中内嵌网页的两种方式
    .net的winform中DialogResult属性的使用
    MVC过滤器使用方法
    C#调用C++的DLL错误解决方法
    WPF中UserControl的属性和事件
    React架构之路
    读完这一篇,字符串格式化界的“白富美”(f-strings)抱回家!
    关于使用format()方法格式化字符串,读这一篇就够了!
    String,StringBuffer与StringBuilder
  • 原文地址:https://www.cnblogs.com/nongzihong/p/10107608.html
Copyright © 2011-2022 走看看