首页 > 其他分享 >4) Builder Pattern

4) Builder Pattern

时间:2023-06-06 13:36:45浏览次数:40  
标签:String color Pattern Builder Car type brand

类别:

 Creational pattern

问题:

 构造函数入参超长易变

方案:

 

示例:

public class BuilderPatternDemo {
    public static void main(String[] args) {
        Car.Builder builder = new Car.Builder("Benz");
        Car car = builder.build();
        System.out.println(car);
        builder = new Car.Builder("Ford").type("Pickup").color("Red");
        car = builder.build();
        System.out.println(car);
    }

}

class Car {
    private String brand;
    private String type;
    private String color;

    public static class Builder {
        // 必填
        private String brand;
        // 选填
        private String type = "SUV";
        private String color = "black";

        public Builder(String brand) {
            this.brand = brand;
        }

        public Builder type(String type) {
            this.type = type;
            return this;
        }

        public Builder color(String color) {
            this.color = color;
            return this;
        }

        public Car build() {
            return new Car(this);
        }
    }

    /**
     * Builder 模式 不提供构造器
     */
    private Car(Car.Builder builder) {
        this.brand = builder.brand;
        this.type = builder.type;
        this.color = builder.color;
    }

    @Override
    public String toString() {
        return "Car [brand=" + brand + ", type=" + type + ", color=" + color + "]";
    }

}

 

应用:

 

不足:(

 

优化:)

 

标签:String,color,Pattern,Builder,Car,type,brand
From: https://www.cnblogs.com/zno2/p/6694808.html

相关文章

  • 3) Singleton pattern
    类别:creationalPattern问题/动机:反复创建对象开销巨大耗时长消耗内存/重复使用方案:  示例: //1classDemo1{publicfinalstaticDemo1INSTANCE=newDemo1();privateDemo1(){if(INSTANCE!=null)thrownewRuntimeExcept......
  • 2) Abstract Factory Pattern
    类别: CreationalPattern问题/动机:如何创建一套父类的问题情形一:混淆,且不能察觉//下面这个方法本来是要建造一辆宝马汽车,但是因为零部件太多,粗心大意误用了奔驰的零件。publicCarcreateBMWCar(){Part1p1=newcom.bmw.Part1();[...]......
  • 1) Factory method pattern
    类别: CreationalPattern问题/动机如何创建一套子类的问题(父类引用指向子类实例)情形1:一个方法返回一个具体的子类极端情况:1万个子类需要一万个方法吗极端情况:如过再扩展一万个子类,还需要再增加一万个方法吗极端情况:虽然有一万个子类,但只需要用到其中一个,其他9999个干陪着......
  • 9) Composite Pattern
    类别: StructualPattern问题: 方案:   示例: importjava.util.ArrayList;importjava.util.List;publicclassCompositePatternDemo{publicstaticvoidmain(String[]args){Bodysun=newBody("太阳","恒星",1392000000);......
  • 8) Filter/Criteria Pattern
    类别: StructualPattern问题: 方案:   示例: importjava.util.ArrayList;importjava.util.HashSet;importjava.util.List;importjava.util.Set;publicclassCriteriaPatternDemo{publicstaticvoidmain(String[]args){List<Person>p......
  • 7) Bridge Pattern
    类别: StructuralPatterns问题:连连看的问题 不使用桥接,要写81个类,使用桥接,只需要18个类方案: 示例: publicclassBridgePatternDemo{publicstaticvoidmain(String[]args){Somebodysb=newXiaohong(newBanana());sb.eat();......
  • 6) Adapter Pattern
    类别: StructuralPattern问题:什么是接口?按照标准提供服务,其他想要使用该接口的要按照该标准接入服务什么是依赖?持有目标对象,拥有使用权(AuseB)数据线?数据线按USB标准接入充电宝,通过lightning提供充电服务手机?通过lightning标准接入数据线  客户端因种种限制只能接入......
  • 10) Decorator Pattern
    类别: StructuralPattern问题: 在不改变接口的前提下增加额外的服务方案:   示例:publicclassDecoratorPatternDemo{publicstaticvoidmain(String[]args){Shapecircle=newCircle();ShaperedCircle=newRedShapeDecorator(newC......
  • cpp: Bridge Pattern
     /*****************************************************************//***\fileGold.h*\brief桥接模式BridgePatternC++14*2023年6月3日涂聚文GeovinDuVisualStudio2022edit.*\authorgeovindu*\dateJune2023***********************......
  • 利用Flutter的LayoutBuilder、BoxConstraints创建自适应布局控件
    简介在Flutter中,LayoutBuilder是一个Widget,用于构建一个包含父组件约束的子组件。它可以获取父组件的约束信息并将其传递给子组件进行布局。LayoutBuilder的主要作用是让子组件根据父组件的大小进行自适应布局。LayoutBuilder的作用是在子控件构建之前获取父级容器的大小,并将其传......