当前位置: 首页 > 知识库问答 >
问题:

为建筑商模式释疑

应向晨
2023-03-14

我正在学习builder模式,到目前为止,我了解到,它是用于初始化的常用模式的一个很好的替代方案:

>

  • 伸缩构造函数模式

    JavaBean模式

        public class Product
    {
        private String color;
        private int price;
    
        public Product() {
        }
    
        public String getColor() {
            return color;
        }
    
        public void setColor(String color) {
            this.color = color;
        }
    
        public int getPrice() {
            return price;
        }
    
        public void setPrice(int price) {
            this.price = price;
        }
    
        public String toString() {
            return getColor() + "\n" + getPrice();
        }    
    }
    
    public class Builder
    {
        private Product product;
    
        public Builder() {
            product = new Product();
        }
        public Builder withColor(String color) {        
            product.setColor(color);
            return this;
        }
    
         public Builder withPrice(int price) {        
            product.setPrice(price);
            return this;
        }
        public Product build() {
            return product;
        }
    }**
    
    public class Client
    {
    
        public static void main(String[] args) {
            System.out.println(new Builder().withColor("Black").withPrice(11).build());
            System.out.println("-----------------------------------------------------");
            System.out.println(new Builder().withColor("Blue").withPrice(12).build());
        }
    }
    

  • 共有1个答案

    卢知
    2023-03-14

    Builder模式对于创建不可变对象和避免几个具有可选参数的构造函数很有用。

    IMO使用Builder模式来构建一个可以使用setter更新的POJO是没有用的。您只创建了一个额外的类。

    根据使用的ORM框架,它可能不需要setter方法的存在。但仅通过反射为成员赋值。

    public final class Product {
        private final String color;
        private final int price;
    
        public Product(Builder builder) {
            this.color = builder.getColor();
            this.price = builder.getPrice();
        }
    
        public String getColor() {
            return color;
        }
    
        public int getPrice() {
            return price;
        }
    
        public String toString() {
            return getColor() + "\n" + getPrice();
        }    
    }
    
    public final class Builder {
    
        private String color;
        private int price;
    
        public Builder() {
            // Assign any default values
        }
    
        public Builder color(String color) {        
            this.color = color;
            return this;
        }
    
        public Builder price(int price) {        
            this.price = price;
            return this;
        }
    
        protected String getColor() {
            return color;
        }
    
        protected int getPrice() {
            return price;
        }
    
        public Product build() {
            return new Product(this);
        }
    }
    
     类似资料:
    • 我目前正在大学从事一个基于Contiki NG和Cooja的为期3个月的项目,我必须创建建筑模型,我想问两个问题: 1)有没有可能在Cooja中添加一个障碍,比如墙或其他东西,或者你知道任何类似的工具能够做到这一点? 2) 在库贾,我可以用哪一个最接近的mote来模拟德克萨斯仪器CC2650发射台?(z1 mote在新版Contiki NG中不可用) 谢啦!

    • 在本章中,我们将详细讨论面向对象的术语和编程概念.Class只是一个实例的工厂。 该工厂包含描述如何制作实例的蓝图。 从类构造实例或对象。 在大多数情况下,我们可以有一个以上的类实例。 每个实例都有一组属性,这些属性在类中定义,因此特定类的每个实例都应具有相同的属性。 类捆绑:行为和状态 类可以让您将对象的行为和状态捆绑在一起。 请注意以下图表以便更好地理解 - 在讨论课程包时,以下几点值得注意

    • 我有一个从Json Dan中提取数据的应用程序。我想提取数据并在旋转木马中显示。屏幕和vscode上没有错误。但是我的图片在旋转木马中不可见,我得到了这样的错误。 我怎么解决这个问题?

    • Joomla是一个模型 - 视图 - 控制器Web应用程序。 在本章中,我们将讨论Joomla的架构风格。 下图显示了Joomla的架构。 Joomla的架构包含以下层 - Database Joomla框架 Components Modules Plugin Templates 网络服务器 Database - 数据库是数据的集合,可以以特定方式进行存储,操作和组织。 数据库存储用户信息,内容和

    • 以下屏幕截图显示了Angular 2应用程序的解剖结构。 每个应用程序都包含组件。 每个组件都是应用程序功能的逻辑边界。 您需要具有分层服务,这些服务用于跨组件共享功能。 以下是组件的解剖结构。 一个组成部分包括 - Class - 这类似于C ++或Java类,它由属性和方法组成。 Metadata - 用于装饰类并扩展类的功能。 Template - 用于定义应用程序中显示的HTML视图。 以

    • Drupal是一个用于Web内容管理的平台,它是构建简单和复杂站点的强大工具。 在本章中,我们将讨论用于实现用户界面的Drupal的架构风格。 下图显示了Drupal的架构 - Drupal的架构包含以下层和miuns; Users Administrator Drupal PHP Web Server Database Users - 这些是Drupal社区的用户。 用户使用Drupal CMS