c# - C# 限制类的使用
问题描述
下面的代码做了我想做的事。Main 方法中的代码看起来和行为完全符合预期。但是,如果 UserMenu、Home 和 DropdownMenu2 类只能由 HeaderNavigationMenu 使用,以防止其他开发人员试图在 HeaderNavigationMenu 类之外使用它们,那将是更可取的。此外,大多数文章都不愿公开所有内容。
问题:下面使用的设计模式是否合适,或者在这种情况下是否有更好、更容易接受的设计模式?
编辑:这种设计的原因。
- 我希望 HeaderNavigationMenu 的最终用户能够使用点符号来获取可用选项的列表。这个架构实现了这个目标(例如:navigationMenu.DropdownMenu2.SelectOption3())
- 希望最终可能需要编辑代码以了解 UserMenu、Home 和 DropDownMenu2 类的其他人非常专门设计为由 HeaderNavigationMenu 类实现。
public class HeaderNavigationMenu
{
public HeaderNavigationMenu()
{
UsersMenu = new UsersMenu();
Home = new Home();
DropdownMenu2 = new DropdownMenu2();
}
public UsersMenu UsersMenu { get; set; }
public Home Home { get; set; }
public DropdownMenu2 DropdownMenu2 { get; set; }
}
public class UsersMenu
{
...
}
public class Home
{
...
}
public class DropdownMenu2
{
public void SelectOption3()
{
...
}
...
}
static void Main(string[] args)
{
HeaderNavigationMenu navigationMenu = new HeaderNavigationMenu();
navigationMenu.DropdownMenu2.SelectOption3();
// The following code is an example of undesired capability;
// prefer if Home class could only be
// used by HeaderNavigationMenu class
Home home = new Home();
}
解决方案
限制对类构造函数的访问。如果它们被声明为“内部”,那么这些类只能由您的代码创建。
推荐阅读
- php - 选择用户详细信息时的 MySQL 更新活动
- ios - DJI iOS SDK (Swift) - iPhone 通过 USB 连接 Mavic 遥控器时,App 无法连接飞行器
- c++ - 使用 vtkImageReslice 重新切片 3d 原始图像
- python - 将 2 个地图与 matplotlib 进行比较
- reactjs - Graphql apollo 客户端从 AppSync 返回空值
- c# - 本地主机上的 ASP.NET MVC Visual Studio http 404 错误,找不到资源。
- git - 使用 GitHub 仅共享您的代码版本
- r - ggmap 包:按变量值缩放时使点大小变大?
- database - 我正在做一个任务,我必须创建只读的 sqlite 数据库,其中不提示用户输入数据
- solr - SOLR,docValues=true,存储=true