Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- namespace AbstractFactory
- {
- public class BaseUser
- {
- protected string login;
- protected string pass;
- public string GetPass() { return pass; }
- public string GetLogin() { return login; }
- public string Login
- {
- set { login = value; }
- get { return login; }
- }
- public string Pass
- {
- set { pass = value; }
- get { return pass; }
- }
- public BaseUser(string login, string pass) { Login = login; Pass = pass; }
- }
- sealed public class SimpleUser : BaseUser
- {
- public SimpleUser(string login, string pass):base(login,pass) {}
- public void Opera() { MessageBox.Show("SimpleUser!"+login+" -> "+pass); }
- }
- sealed public class AdminUser : BaseUser
- {
- public AdminUser(string login, string pass):base(login,pass) {}
- public void Opera() { MessageBox.Show("AdminUser!" + login + " -> " + pass); }
- }
- public class FactoryUser
- {
- public static BaseUser CreateUser(int type, string login, string pass)
- {
- switch (type)
- {
- case 1: return new SimpleUser(login, pass);
- case 2: return new AdminUser(login, pass);
- }
- return new BaseUser("", "");
- }
- }
- }
- AbstractFactory.AdminUser admin = AbstractFactory.FactoryUser.CreateUser(2, "User1", "12345");
- AbstractFactory.SimpleUser user = AbstractFactory.FactoryUser.CreateUser(1, "User2", "1234567890");
- ...
- user.Opera();
- Cannot implicitly convert type 'AbstractFactory.BaseUser' to 'AbstractFactory.AdminUser'. An explicit conversion exists (are you missing a cast?)
- AdminUser admin = new SimpleUser(login, pass); // Fail
- BaseClass/*Interface*/ Obj = new ChildClass(args);
- public void SomeMethod(BaseUser user)
- {
- user.Opera(); // Fail метод отсутсвует
- }
- SomeMethod(new AdminUser());
- public void SomeMethod(AdminUser user)
- {
- user.Opera();
- }
- SomeMethod(new BaseUser()); // Fail метод отсутсвует
- public abstract class BaseUser
- {
- public string Login { get; protected set; }
- public string Pass { get; protected set; }
- public BaseUser(string login, string pass)
- {
- Login = login; Pass = pass;
- }
- public abstract void Opera();
- }
- sealed public class SimpleUser : BaseUser
- {
- public SimpleUser(string login, string pass)
- : base(login, pass)
- {
- }
- public override void Opera()
- {
- Console.WriteLine("SimpleUser!" + Login + " -> " + Pass);
- }
- }
- sealed public class AdminUser : BaseUser
- {
- public AdminUser(string login, string pass)
- : base(login, pass)
- {
- }
- public override void Opera()
- {
- Console.WriteLine("AdminUser!" + Login + " -> " + Pass);
- }
- }
- public class FactoryUser
- {
- public static BaseUser CreateUser(int type, string login, string pass)
- {
- switch (type)
- {
- case 1: return new SimpleUser(login, pass);
- case 2: return new AdminUser(login, pass);
- }
- throw new NotImplementedException();
- }
- }
- public interface UserFactory
- {
- BaseUser CreateUser(string login, string pass);
- }
- public class AdminUserFactory : UserFactory
- {
- public BaseUser CreateUser(string login, string pass)
- {
- return new AdminUser(login, pass);
- }
- }
- public class SimpleUserFactory : UserFactory
- {
- public BaseUser CreateUser(string login, string pass)
- {
- return new SimpleUser(login, pass);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement