有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Builder模式精度

我目前正在开发生成器模式。有一件事我不明白,那就是。比如说,我想创建计算机、笔记本电脑和台式机。我应该创建一个ComputerBuilder,根据传递给它的参数使用不同的进程,还是应该创建一个LaptopBuildera DesktopBuilder?我在网上的代码示例中都看到过。Wikipedia在其pizza示例中使用了第二种方法。对我来说,这看起来更像工厂的模式,但我可以使用一些外部光线。谢谢


共 (1) 个答案

  1. # 1 楼答案

    创建一个抽象生成器,并将其扩展到两个具体的生成器子类。这就把逻辑抽象出来了

    下面是一些示例代码。在这段代码中,抽象类中定义了三个标准方法。扩展类可以选择实现哪一个。最后,所有抽象类都将实现抽象方法并返回一台计算机

    public abstract class Builder {
    
        public void doSomethingA() {};
        public void doSomethingB() {};
        public void doSomethingC() {};
        public abstract Computer returnComputer();
    }
    

    现在,LaptopBuilder类扩展了这个抽象类,并拥有两个方法的自己版本:

    public class LaptopBuilder {
    
        private Computer computer;
    
        public LaptopBuilder(Computer computer) {
            this.computer = computer;
        }
    
        public void doSomethingA() {
            System.out.println("Laptop Method A");
        }
    
        public void doSomethingB() {
            System.out.println("Laptop Method B");
        }
    
        public Computer returnComputer() {
            return computer;
        }
    }
    

    最后,DesktopBuilder类扩展了抽象类,并有自己的两个方法版本:

    public class DesktopBuilder {
    
        private Computer computer;
    
        public DesktopBuilder(Computer computer) {
            this.computer = computer;
        }
    
        public void doSomethingB() {
            System.out.println("Desktop Method B");
        }
    
        public void doSomethingC() {
            System.out.println("Desktop Method C");
        }
    
        public Computer returnComputer() {
            return computer;
        }
    }
    

    现在只需要创建一个director抽象类,以及一个台式机和笔记本电脑的具体director:

    public abstract class Director {
        public abstract Computer build(Builder builder);
    }
    
    public class LaptopDirector extends Director {
        public Computer build(Builder builder) {
            builder.doSomethingA();
            builder.doSomethingB();
            return builder.returnComputer();
        }
    }
    
    public class DesktopDirector extends Director {
        public Computer build(Builder builder) {
            builder.doSomethingB();
            builder.doSomethingC();
            return builder.returnComputer();
        }
    }
    

    最后,在您的客户机中,只需创建您的计算机,创建相关的生成器,创建相关的控制器,并调用build方法

    编辑:这篇文章也可能有价值:When would you use the Builder Pattern?