창설형 모드 - 창설자 모드 (2.4)

8479 단어

무엇이 건설자 모델입니까?


공장 모드는 하나의 대상을 만드는 데 초점을 맞추고, 건설자는 그 외에 창설된 대상에 값을 부여해야 한다.
간단하게 말하면, 건설자 모드 = 창설 대상 + 속성 부여 값입니다.

건설자 모드 응용 장면


창설자 모드는 창설 클래스에 여러 개의 매개 변수를 포함하고 맞춤형화되어야 하는 상황에 적합하다.
간단하게 말하자면 건설자 모델의 목적은 하나의 용 서비스를 창조하는 것이다. 대상을 만들 뿐만 아니라 속성에 값을 부여하는 것이다.
컴퓨터를 예로 들면 컴퓨터의 성능은 대체로 CPU, 그래픽 카드, 메모리, 하드디스크 등 몇 가지 속성으로 구성된다.
시중에는 이미 조립된 완제품이 더 많아서 사용자 스스로 컴퓨터 한 대를 조립하지 못하게 한다.(물론 자신도 어울릴 수 있지만)
시장은 수요에 따라 게임 노트, 사무용 노트와 오락 노트 등으로 나뉜다.종류에 따라 성능이 다르다.그러나 대체적인 범주에 있을 것이다.
만약 모든 CPU, 그래픽 카드, 하드디스크 등을 배열하여 조합한다면 컴퓨터의 종류는 계산하기 어려울 것이다.그래서 공식적으로 맞춤 제작본을 내놓아 선택의 난이도를 줄일 뿐만 아니라생산의 편의도 제공했다.
Demo 구현을 작성하려면 다음과 같이 하십시오.
허선 이상은 서비스 측으로 이해할 수 있고 한 번에 클라이언트로 이해할 수 있다.
그러면 한 제품을 생산하는 절차는 대체적으로 다음과 같다. 하나의 건설자가 클래스와 하나의 지휘자의 조립류를 실례화하고 지휘자가 클래스 중의build 방법을 호출하여 건설자가 클래스를 실현하는setter 방법을 실현하여 실례화 제품의 목적을 달성한다.
왜 건설자 인터페이스 클래스와 건설자 실현 클래스가 필요합니까?
인터페이스 클래스는 제품의 생산 표준(실례화 표준)을 제어하고 모든 구체적인 제품은 이 인터페이스를 실현하여 제품의 창설을 완성해야 한다.
장점: 확장성이 향상되었습니다.(클라이언트도 인터페이스의 실현을 통해 사용자 정의 제품을 만들 수 있다)
왜 지휘자 조립류가 필요합니까?
건설자의 실용적인 setter 방법을 사용하면 제품의 실례화 창설을 완성할 수 있지만 이 부분은 모든 제품에 대해 똑같다.
그러면 제품을 실례화하는 과정에서 이 중복되고 아무런 변화가 없는 과정을 완전히 봉인할 수 있다.코드 재사용을 실현하다.
class Computer  // 
{
    private String cpu;
    private String gpu;
    private String memory;
    private String hardpan;

    public String getCpu() {
        return cpu;
    }

    public void setCpu(String cpu) {
        this.cpu = cpu;
    }

    public String getGpu() {
        return gpu;
    }

    public void setGpu(String gpu) {
        this.gpu = gpu;
    }

    public String getMemory() {
        return memory;
    }

    public void setMemory(String memory) {
        this.memory = memory;
    }

    public String getHardpan() {
        return hardpan;
    }

    public void setHardpan(String hardpan) {
        this.hardpan = hardpan;
    }

    @Override
    public String toString() {
        return "Computer{" +
                "cpu='" + cpu + '\'' +
                ", gpu='" + gpu + '\'' +
                ", memory='" + memory + '\'' +
                ", hardpan='" + hardpan + '\'' +
                '}';
    }
}

interface ComputerBuilder    // 
{
    void setCpu();
    void setGpu();
    void setMemeory();
    void setHardpan();
    Computer build();
}

class Hp_Game implements ComputerBuilder   // 
{
    private Computer computer=new Computer();


    @Override
    public void setCpu() {
        computer.setCpu("i7 8300");
    }

    @Override
    public void setGpu() {
        computer.setGpu("rtx1080i");
    }

    @Override
    public void setMemeory() {
        computer.setMemory("32g");
    }

    @Override
    public void setHardpan() {
        computer.setHardpan("500G m2");
    }

    @Override
    public Computer build() {
        return computer;
    }
}

class Hp_Work implements ComputerBuilder
{
    private Computer computer=new Computer();


    @Override
    public void setCpu() {
        computer.setCpu("i6 7300");
    }

    @Override
    public void setGpu() {
        computer.setGpu("MX250");
    }

    @Override
    public void setMemeory() {
        computer.setMemory("4g");
    }

    @Override
    public void setHardpan() {
        computer.setHardpan("500G SATA");
    }

    @Override
    public Computer build() {
        return computer;
    }
}

class ComputerDirector   // 
{
    public Computer build(ComputerBuilder cb)
    {
        cb.setCpu();
        cb.setGpu();
        cb.setMemeory();
        cb.setHardpan();

        return cb.build();
    }
}


//=============================
public class APPlication
{

    public static void main(String[] args) {
        Hp_Game hp01 = new Hp_Game();
        Hp_Work hp02 = new Hp_Work();


        ComputerDirector computerDirector = new ComputerDirector();

        Computer computer_hp1=computerDirector.build(hp01);
        System.out.println(computer_hp1);

        Computer computer_hp02 =computerDirector.build(hp02);
        System.out.println(computer_hp02);

    }
}




클라이언트가 제품 실례를 확장하다


하나의 건설자 구현 클래스를 정의하여 건설자 인터페이스 클래스를 실현하고setter 맞춤형 제작을 완성하면 됩니다.
class Computer  // 
{
    private String cpu;
    private String gpu;
    private String memory;
    private String hardpan;

    public String getCpu() {
        return cpu;
    }

    public void setCpu(String cpu) {
        this.cpu = cpu;
    }

    public String getGpu() {
        return gpu;
    }

    public void setGpu(String gpu) {
        this.gpu = gpu;
    }

    public String getMemory() {
        return memory;
    }

    public void setMemory(String memory) {
        this.memory = memory;
    }

    public String getHardpan() {
        return hardpan;
    }

    public void setHardpan(String hardpan) {
        this.hardpan = hardpan;
    }

    @Override
    public String toString() {
        return "Computer{" +
                "cpu='" + cpu + '\'' +
                ", gpu='" + gpu + '\'' +
                ", memory='" + memory + '\'' +
                ", hardpan='" + hardpan + '\'' +
                '}';
    }
}

interface ComputerBuilder    // 
{
    void setCpu();
    void setGpu();
    void setMemeory();
    void setHardpan();
    Computer build();
}

class Hp_Game implements ComputerBuilder   // 
{
    private Computer computer=new Computer();


    @Override
    public void setCpu() {
        computer.setCpu("i7 8300");
    }

    @Override
    public void setGpu() {
        computer.setGpu("rtx1080i");
    }

    @Override
    public void setMemeory() {
        computer.setMemory("32g");
    }

    @Override
    public void setHardpan() {
        computer.setHardpan("500G m2");
    }

    @Override
    public Computer build() {
        return computer;
    }
}

class Hp_Work implements ComputerBuilder
{
    private Computer computer=new Computer();


    @Override
    public void setCpu() {
        computer.setCpu("i6 7300");
    }

    @Override
    public void setGpu() {
        computer.setGpu("MX250");
    }

    @Override
    public void setMemeory() {
        computer.setMemory("4g");
    }

    @Override
    public void setHardpan() {
        computer.setHardpan("500G SATA");
    }

    @Override
    public Computer build() {
        return computer;
    }
}

class ComputerDirector   // , 
{
    public Computer build(ComputerBuilder cb)
    {
        cb.setCpu();
        cb.setGpu();
        cb.setMemeory();
        cb.setHardpan();

        return cb.build();
    }
}


//=============================

class Dell_Game implements ComputerBuilder
{
    private Computer computer=new Computer();


    @Override
    public void setCpu() {
        computer.setCpu("i7 9300");
    }

    @Override
    public void setGpu() {
        computer.setGpu("GTX1090");
    }

    @Override
    public void setMemeory() {
        computer.setMemory("32g");
    }

    @Override
    public void setHardpan() {
        computer.setHardpan("500G m2");
    }

    @Override
    public Computer build() {
        return computer;
    }
}

public class APPlication
{

    public static void main(String[] args) {
//        Hp_Game hp01 = new Hp_Game();
//        Hp_Work hp02 = new Hp_Work();


        ComputerDirector computerDirector = new ComputerDirector();

//        Computer computer_hp1=computerDirector.build(hp01);
//        System.out.println(computer_hp1);
//
//        Computer computer_hp02 =computerDirector.build(hp02);
//        System.out.println(computer_hp02);

        Dell_Game dell_game = new Dell_Game();
        Computer computer_Dell_game = computerDirector.build(dell_game);
        System.out.println(computer_Dell_game);




    }
}




소결


건설자 모드의 목적은 대상을 만들고 속성에 값을 부여하는 것이다.
다른 각도에서 생각하면 인터페이스를 실현하는 건설자의 실현류는 정의할 때 제품류를 실현하기 위한 것이다(구체적인 제품류는 고정된 것이다).그래서 이 종류 자체의 목적은 바로 다른 종류를 실례화하기 위한 것이다.지휘자는 이 종류의setter 방법을 호출하여 제품 종류에 대한 속성 부여를 완성한다.
건설자 모델의 핵심 목적은 실례화된 속성을 가진 대상을 만들고 좋은 확장성을 가지는 것이다.(개폐 원칙에 부합)
건설자는 상자를 열면 바로 사용할 수 있는 제품을 만들어야 한다.

좋은 웹페이지 즐겨찾기