minhas informações de contato
Correspondência[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
O Builder Pattern em padrões de design é um padrão de design de criação de objetos comumente usado, usado principalmente para resolver problemas complexos de construção de objetos. Aqui está uma introdução detalhada ao modo construtor:
O padrão construtor separa a construção de um objeto complexo de sua representação, permitindo que o mesmo processo de construção crie diferentes representações. Em outras palavras, funciona dividindo o processo de construção de objetos complexos em uma série de etapas simples e permitindo aos usuários criar diferentes objetos especificando a ordem e os parâmetros dessas etapas.
Diagrama de classes
No modo construtor, as seguintes funções geralmente são incluídas:
O padrão Builder é adequado para os seguintes cenários:
No exemplo a seguir, usaremos o padrão Builder para projetar um sistema de reforma de casa.Vamos definir umHouse
As classes são objetos complexos que contêm múltiplos componentes de decoração (como tetos, tintas, pisos, pisos, etc.).Então, definimos umHouseBuilder
Interface, contendo métodos abstratos para criação desses componentes. A seguir, criamos classes de construtores específicas para cada estilo de decoração específico (como estilo europeu luxuoso, pastoral leve e luxuoso, minimalista moderno).Por fim, passaremos por umDirector
classe para orientar o processo de construção, mas pode não ser necessário neste exemplo, pois podemos definir a lógica de construção completa diretamente na classe construtora.
Contudo, para demonstrar o conceito do papel do condutor, manteremos umaDirector
classe, mas apenas para fins ilustrativos, na verdade o processo de construção pode ser feito diretamente na classe construtora.
- // 房屋类
- public class House {
- private String ceiling; // 吊顶
- private String paint; // 涂料
- private String floor; // 地板
- private String tiles; // 地砖
-
- // 私有构造函数
- private House() {}
-
- // Getter 方法
- public String getCeiling() {
- return ceiling;
- }
-
- public String getPaint() {
- return paint;
- }
-
- public String getFloor() {
- return floor;
- }
-
- public String getTiles() {
- return tiles;
- }
-
- // 建造者接口
- public interface HouseBuilder {
- HouseBuilder buildCeiling(String ceiling);
- HouseBuilder buildPaint(String paint);
- HouseBuilder buildFloor(String floor);
- HouseBuilder buildTiles(String tiles);
- House build();
- }
-
- // 豪华欧式建造者 ,注意是静态内部类
- public static class LuxuryEuropeanBuilder implements HouseBuilder {
- private House house;
-
- public LuxuryEuropeanBuilder() {
- this.house = new House();
- }
-
- @Override
- public HouseBuilder buildCeiling(String ceiling) {
- house.ceiling = "豪华欧式吊顶: " + ceiling;
- return this;
- }
-
- @Override
- public HouseBuilder buildPaint(String paint) {
- house.paint = "豪华欧式涂料: " + paint;
- return this;
- }
-
- @Override
- public HouseBuilder buildFloor(String floor) {
- house.floor = "豪华欧式地板: " + floor;
- return this;
- }
-
- @Override
- public HouseBuilder buildTiles(String tiles) {
- house.tiles = "豪华欧式地砖: " + tiles;
- return this;
- }
-
- @Override
- public House build() {
- return house;
- }
- }
-
- // ... 可以为其他风格创建类似的建造者类
-
- // 指挥者类(可选,这里主要用于展示概念)
- public static class Director {
- private HouseBuilder builder;
-
- public Director(HouseBuilder builder) {
- this.builder = builder;
- }
-
- // 这里可以添加方法来指导建造过程,但在这个例子中,我们直接在建造者中完成了所有工作
- public House constructHouse() {
- // 假设这是由指挥者指导的步骤,但在这里我们直接返回建造者的结果
- return builder
- .buildCeiling("水晶吊灯")
- .buildPaint("金色镶边涂料")
- .buildFloor("大理石地板")
- .buildTiles("马赛克地砖")
- .build();
- }
- }
-
- // 主函数,用于演示
- public static void main(String[] args) {
- HouseBuilder luxuryBuilder = new LuxuryEuropeanBuilder();
- // Director director = new Director(luxuryBuilder); // 如果使用指挥者
-
- House house = luxuryBuilder
- .buildCeiling("水晶吊灯")
- .buildPaint("金色镶边涂料")
- .buildFloor("大理石地板")
- .buildTiles("马赛克地砖")
- .build();
-
- System.out.println("Ceiling: " + house.getCeiling());
- System.out.println("Paint: " + house.getPaint());
- System.out.println("Floor: " + house.getFloor());
- System.out.println("Tiles: " + house.getTiles());
- }
- }
Observe que neste exemplo,Director
Na verdade, as classes não agregam muito valor, pois toda a lógica de construção já está encapsulada emHouseBuilder
A interface é implementada. Mas em aplicações mais complexas,Director
As classes podem ser usadas para encapsular a ordem e a lógica do processo de construção, especialmente quando o processo de construção abrange vários construtores.
Pela introdução acima, pode-se perceber que o padrão construtor apresenta grandes vantagens na construção de objetos complexos. Melhora o encapsulamento e a escalabilidade do código ao separar o processo de construção da representação, e também reduz a comunicação entre o cliente e o específico. produto.
Se este artigo for útil para o seu estudo, lembre-se de curtir e colecioná-lo.