Trên www.dofactory.com Tôi đã tìm thấy một ví dụ về thế giới thực của Mẫu Nhà máy. Nhưng mã tạo ra một cảnh báo trong ReSharper về một cuộc gọi thành viên ảo trong hàm tạo.Làm thế nào để ngăn chặn mô hình Phương thức nhà máy gây ra cảnh báo về cuộc gọi thành viên ảo trong hàm tạo?
Mã gây ra cảnh báo như sau:
abstract class Document
{
private List<Page> _pages = new List<Page>();
// Constructor calls abstract Factory method
public Document()
{
this.CreatePages(); // <= this line is causing the warning
}
public List<Page> Pages
{
get { return _pages; }
}
// Factory Method
public abstract void CreatePages();
}
class Resume : Document
{
// Factory Method implementation
public override void CreatePages()
{
Pages.Add(new SkillsPage());
Pages.Add(new EducationPage());
Pages.Add(new ExperiencePage());
}
}
Trong mã tốn, bạn có thể sau đó chỉ cần sử dụng:
Document document = new Resume();
Tôi hiểu tại sao đó là một ý tưởng tồi để gọi một ảo thành viên trong hàm tạo (như được giải thích here).
Câu hỏi của tôi là cách bạn có thể cấu trúc lại điều này để vẫn sử dụng mẫu nhà máy, nhưng không có cuộc gọi thành viên ảo trong hàm tạo.
Nếu tôi chỉ muốn loại bỏ các cuộc gọi đến CreatePages
từ các nhà xây dựng, người tiêu dùng sẽ phải gọi một cách rõ ràng CreatePages
phương pháp:
Document document = new Resume();
document.CreatePages();
tôi nhiều hơn nữa thích tình huống mà tạo ra một mới Resume
là tất cả những gì cần thiết để tạo một trang Tiếp tục chứa các trang.
Chỉ cần đánh dấu 'Tiếp tục' là' niêm phong'? – EkoostikMartin
@EkoostikMartin nếu OP sẽ thức dậy vào ngày mai muốn tuyên bố 'StylishResume: Resume' thì sao? –
@EkoostikMartin: Tôi không chỉ muốn cảnh báo biến mất, tôi muốn biết điều này có thể được thực hiện như thế nào. Vẫn có thể phân lớp 'Tiếp tục'. – comecme