Builder design pattern

xin chào mn hiện em đang học về design pattern mong mn xem em vẽ design pattern và viết code vậy có đúng chưa?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Builder
{
    public class Mobile
    {
        public string Id { get; set; }
        public string Name { get; set; }
        public string Color { get; set; }

        public Mobile(string id, string name, string color)
        {
            Id = id;
            Name = name;
            Color = color;
        }

        public Mobile(string id)
        {
            Id = id;
           
        }

        public Mobile()
        {
        }

        public override string ToString()
        {
            var content = "";
            content += $"Id: \t {Id}\n";
            content += $"Name: \t {Name}\n";
            content += $"Color: \t {Color}\n";

            return content;

        }
    }

    public interface IMobileBuilder
    {
        MobileBuilder AddId(string id);
        MobileBuilder AddName(string name);
        MobileBuilder AddColor(string color);

        Mobile Build();


    }

    public class MobileBuilder : IMobileBuilder
    {

        private readonly Mobile mobile;

        public MobileBuilder()
        {
            mobile = new Mobile();
        }
        //Mobile id
        public MobileBuilder AddId(string id)
        {
           mobile.Id = id;
           return this;
        }

        public MobileBuilder AddName(string name)
        {
            mobile.Name = name;
            return this;
        }
        public MobileBuilder AddColor(string color)
        {
            mobile.Color = color;
            return this;
        }

        public Mobile Build()
        {

            return mobile;
        }

        
    }



    public class Program
    {
        static void Main(string[] args)
        {
            var mobileBuilder = new MobileBuilder()
                                    .AddId("1")
                                    .AddName("Samsung")
                                    .AddColor("Black")
                                    .Build();
            Console.WriteLine(mobileBuilder.ToString());
            Console.ReadLine();
        }
    }
}

image

Tớ nghĩ cậu hiểu concept, nhưng chưa cài đặt chính xác.

  • build() method nên là nơi tạo ra object, không phải constructor của builder.
  • Cậu nên có tất cả các property của object mà cậu muốn build trong builder object.
  • Khi cậu dùng builder, cậu nên dùng nó với value object, hơn là entity.
    Tất nhiên cậu có thể sử dụng để tạo ra entity, cơ mà tớ nghĩ sẽ không có nhiều lợi ích lắm, khi cậu có thể dùng setter để set các field cậu muốn thay cho builder.

Nếu cậu cài đặt theo hướng dẫn trên, lúc cậu muốn build 2 object với cùng 1 set thuộc tính, cậu có thể gọi builder.build() 2 lần sau khi cậu đã setup thuộc tính. Ở cài đặt hiện tại, cậu sẽ có chỉ có 1 object được tạo ra sau khi cậu build, nên “builder” không còn ý nghĩa “người xây dựng” nữa :smile: (cậu chỉ có duy nhất 1 thể hiện của sản phẩm, lúc cậu sản xuất Apple iphone, Samsung phone của cậu cũng sẽ bị rename).

Hope it helps!

3 Likes

chi tiết quá cảm ơn cậu :laughing: :laughing: :laughing: :laughing:

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?