zoukankan      html  css  js  c++  java
  • java设计模式学习4--Builder Pattern[原创]

      今天看了看建造模式,就上来写点心得体会。
      先套用一段理论:建造模式是将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。
      怎么理解呢?
      一个大的系统,我们该怎样设计?我想,对于一个好的设计来说,应该是尽量不用具体的东西来定义,正如我上篇文章最后说的,定义类型尽量用抽象的,记住,在java里,抽象是最高境界,一切具体的东西都是由抽象的实例化而来,抽象的东西可以存在,实际的东西必然也可以。我们要设计的,是一个抽象的结构,抽象的结构里的每部分,也是抽象的。对于抽象的部分,可以有不同的实现,从而整个系统可以有不同的实现。
      说到这里,我想起了抽象工厂模式,这里2者之间怎么这么的相似??好,接下来就说,为什么它就要叫建造模式。
      在抽象工厂模式里,由抽象工厂到具体工厂再到具体的一系列产品,用户是与工厂联系得到产品,而在建造模式里,由一个抽象的建造者引申到多个具体的建造者,具体的建造者再到产品,这里是一样的,但是,在建造模式里,还有个指导者,由指导者来管理建造者,用户是与指导者联系的,指导者联系建造者最后得到产品。再看看那套理论的最后一句,“建造模式可以强制实行一种分步骤进行的建造过程”,明白了没?建造模式“可以”强制实行一种分步骤进行的建造过程,注意是可以,不是必须的。看到这里,明白抽象工厂模式和建造模式的区别没?
      下面,摘抄网上一个实现了分步骤进行的建造过程:
      public interface Builder {
      
        void buildPartA();
        void buildPartB();
        void buildPartC();
      
        Product getResult();
      }

      public class Director {
      
        private Builder builder;
      
        public Director( Builder builder ) {
          this.builder = builder;
        }
        public void construct() {
          builder.buildPartA();
          builder.buildPartB();
          builder.buildPartC();
        }
      }

      public class ConcreteBuilder implements Builder {
      
        Part partA, partB, partC;
        public void buildPartA() {
          //这里是具体如何构建partA的代码
      
        };
        public void buildPartB() {
          //这里是具体如何构建partB的代码
        };
         public void buildPartC() {
          //这里是具体如何构建partB的代码
        };
         public Product getResult() {
          //返回最后组装成品结果
        };
      
      }

      public interface Product { }
      public interface Part { }
      下面是调用builder的方法:
      ConcreteBuilder builder = new ConcreteBuilder();
      Director director = new Director( builder );
      
      director.construct();
      Product product = builder.getResult();

      建造模式就讲到这里。
      
  • 相关阅读:
    ==和equals的区别
    layui渲染Select列表
    layui中使用自定义数据格式对数据表格进行渲染
    java中使用javaMail工具类发送邮件
    上手spring boot项目(三)之spring boot整合mybatis进行增删改查
    上手spring boot项目(四)之springboot如何返回json数据
    遍历json数据的几种方式
    springboot整合thymleaf模板引擎
    上手spring boot项目(二)之spring boot整合shiro安全框架
    上手spring boot项目(一)之如何在controller类中返回到页面
  • 原文地址:https://www.cnblogs.com/zxub/p/177473.html
Copyright © 2011-2022 走看看