Advertisement
Guest User

Untitled

a guest
Apr 1st, 2016
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.50 KB | None | 0 0
  1. namespace AbstractFactory
  2. {
  3. public class BaseUser
  4. {
  5. protected string login;
  6. protected string pass;
  7.  
  8. public string GetPass() { return pass; }
  9. public string GetLogin() { return login; }
  10.  
  11. public string Login
  12. {
  13. set { login = value; }
  14. get { return login; }
  15. }
  16.  
  17. public string Pass
  18. {
  19. set { pass = value; }
  20. get { return pass; }
  21. }
  22.  
  23. public BaseUser(string login, string pass) { Login = login; Pass = pass; }
  24. }
  25.  
  26. sealed public class SimpleUser : BaseUser
  27. {
  28. public SimpleUser(string login, string pass):base(login,pass) {}
  29. public void Opera() { MessageBox.Show("SimpleUser!"+login+" -> "+pass); }
  30. }
  31.  
  32. sealed public class AdminUser : BaseUser
  33. {
  34. public AdminUser(string login, string pass):base(login,pass) {}
  35. public void Opera() { MessageBox.Show("AdminUser!" + login + " -> " + pass); }
  36. }
  37.  
  38. public class FactoryUser
  39. {
  40. public static BaseUser CreateUser(int type, string login, string pass)
  41. {
  42. switch (type)
  43. {
  44. case 1: return new SimpleUser(login, pass);
  45. case 2: return new AdminUser(login, pass);
  46. }
  47. return new BaseUser("", "");
  48. }
  49. }
  50.  
  51. }
  52.  
  53. AbstractFactory.AdminUser admin = AbstractFactory.FactoryUser.CreateUser(2, "User1", "12345");
  54. AbstractFactory.SimpleUser user = AbstractFactory.FactoryUser.CreateUser(1, "User2", "1234567890");
  55.  
  56. ...
  57.  
  58. user.Opera();
  59.  
  60. Cannot implicitly convert type 'AbstractFactory.BaseUser' to 'AbstractFactory.AdminUser'. An explicit conversion exists (are you missing a cast?)
  61.  
  62. AdminUser admin = new SimpleUser(login, pass); // Fail
  63.  
  64. BaseClass/*Interface*/ Obj = new ChildClass(args);
  65.  
  66. public void SomeMethod(BaseUser user)
  67. {
  68. user.Opera(); // Fail метод отсутсвует
  69. }
  70.  
  71. SomeMethod(new AdminUser());
  72.  
  73. public void SomeMethod(AdminUser user)
  74. {
  75. user.Opera();
  76. }
  77.  
  78. SomeMethod(new BaseUser()); // Fail метод отсутсвует
  79.  
  80. public abstract class BaseUser
  81. {
  82. public string Login { get; protected set; }
  83. public string Pass { get; protected set; }
  84.  
  85. public BaseUser(string login, string pass)
  86. {
  87. Login = login; Pass = pass;
  88. }
  89.  
  90. public abstract void Opera();
  91. }
  92.  
  93. sealed public class SimpleUser : BaseUser
  94. {
  95. public SimpleUser(string login, string pass)
  96. : base(login, pass)
  97. {
  98. }
  99.  
  100. public override void Opera()
  101. {
  102. Console.WriteLine("SimpleUser!" + Login + " -> " + Pass);
  103. }
  104. }
  105.  
  106. sealed public class AdminUser : BaseUser
  107. {
  108. public AdminUser(string login, string pass)
  109. : base(login, pass)
  110. {
  111. }
  112.  
  113. public override void Opera()
  114. {
  115. Console.WriteLine("AdminUser!" + Login + " -> " + Pass);
  116. }
  117. }
  118.  
  119. public class FactoryUser
  120. {
  121. public static BaseUser CreateUser(int type, string login, string pass)
  122. {
  123. switch (type)
  124. {
  125. case 1: return new SimpleUser(login, pass);
  126. case 2: return new AdminUser(login, pass);
  127. }
  128.  
  129. throw new NotImplementedException();
  130. }
  131. }
  132.  
  133. public interface UserFactory
  134. {
  135. BaseUser CreateUser(string login, string pass);
  136. }
  137.  
  138. public class AdminUserFactory : UserFactory
  139. {
  140. public BaseUser CreateUser(string login, string pass)
  141. {
  142. return new AdminUser(login, pass);
  143. }
  144. }
  145.  
  146. public class SimpleUserFactory : UserFactory
  147. {
  148. public BaseUser CreateUser(string login, string pass)
  149. {
  150. return new SimpleUser(login, pass);
  151. }
  152. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement