构建器设计模式是否是创建itemBrowsePanel
对象的正确模式?此对象需要另外两个对象(iconBrowsePanel,textBrowsePanel)
才能准备好使用,如下所示:
HTMLPanel itemBrowsePanel=new HTMLPanel("");
HTMLPanel iconBrowsePanel=new HTMLPanel("");
HTMLPanel textBrowsePanel=new HTMLPanel("");
HTMLPanel titlePanel=new HTMLPanel(titlePanelText);
HTMLPanel subTitlePanel=new HTMLPanel(subTitlePanelText+" "+panelName);
textBrowsePanel.add(titlePanel);
textBrowsePanel.add(subTitlePanel);
itemBrowsePanel.add(iconBrowsePanel);
itemBrowsePanel.add(textBrowsePanel);
如果构建器设计模式是正确的,是否适用于在创建时将参数传递给任何对象以构造其他对象?
答案 0 :(得分:1)
Composite Pattern更好,因为您正在构建聚合对象。它还提供了更大的灵活性,例如,更容易将面板更改为接受3个而不是2个子对象。
首先,为系统中的所有UI元素创建基类。
public abstract class UIElement
{
public string Name { get; set; }
protected UIElement(string name)
{
this.Name = name;
}
public abstract void Add(UIElement element);
}
然后添加HTMLPanel
并覆盖添加以执行您想要的任何操作。在这种情况下,您希望将其子对象限制为两个。
public class HTMLPanel
: UIElement
{
private List<UIElement> children = new List<UIElement>();
// constructor here
public override void Add(UIElement element)
{
if (this.children.Count > 2)
{
throw new Exception("");
}
this.children.Add(element);
}
}
要构建对象,它与您在问题中所做的相似或完全相同。
将来,您可能希望在面板中显示标签。您可以通过添加新类轻松实现这一目标。
public class Label
: UIElement
{
public override void Add(UIElement element)
{
throw new NotSupportedException("Labal cannot have a child element.");
}
}
您可以将其添加到面板中。
HTMLPanel subTitlePanel = new HTMLPanel(subTitlePanelText+" "+panelName);
Label yourLabelObject = new Label("myLabel");
textBrowsePanel.add(yourLabelObject);
答案 1 :(得分:0)
此对象需要另外两个对象(
iconBrowsePanel
,textBrowsePanel
)以便随时可以使用
iconBrowsePanel
和textBrowsePanel
在使用之前添加到itemBrowsePanel
,那么最好使用特定构造函数创建ItemBrowsePanel
类它采用这些参数并确保不变构建器设计模式是否是创建itemBrowsePanel对象的正确模式?
如果您想在其他地方重用现有的构造算法,最好将其包含到一个方法中,该方法接受titlePanelText
,subTitlePanelText
或panelName
等参数并返回完全构造的HTMLPanel
,代表itemBrowsePanel
如果创建itemBrowsePanel
的参数和/或参数组合太多,那么是的,使用构建器可能是合适的