public People(string document, string name, string email, PeopleType type) { Document = document; Name = name; Email = email; Type = type; }
public IPeople GetPeople(PeopleType type) { switch (type) { case PeopleType.Rural: { return(new Villagers()); } case PeopleType.Urban: { return(new CityPeople()); } case PeopleType.Cave: { return(new CavePeople()); } default: { throw new NotSupportedException(); } } }
/// <summary> /// 不同的国家,不同的问候方式怎么实现 /// 加参数,加判断 /// 增加国家,修改方法 /// 职责不单一 /// </summary> /// <param name="name"></param> /// <param name="type"></param> public static void Greeting(string name, PeopleType type)//传的是值,根据值来决定行为 { if (type == PeopleType.chinese) { Console.WriteLine("{0},早上好", name); } else if (type == PeopleType.English) { Console.WriteLine("{0},English", name); } else { throw new Exception(""); } }
public IPeople GetPeople(PeopleType type) { IPeople people = null; switch (type) { case PeopleType.RURAL: people = new Villagers(); break; case PeopleType.URBAN: people = new CityPeople(); break; default: break; } return(people); }
//加参数判断---执行分支逻辑 //好处:公共逻辑方便 //坏处:任意分支变化,经常改动代码 public void SayHiSwitch(string name, PeopleType peopleType) { switch (peopleType) { case PeopleType.E: Console.WriteLine(name + "good morning"); break; case PeopleType.C: Console.WriteLine(name + "早上好"); break; default: break; } }
public IPeople GetPeople(PeopleType type) { IPeople people = null; switch (type) { case PeopleType.Rural: people = new Villagers(); break; case PeopleType.Urban: people = new CityPeople(); break; } return(people); }
public IPeople GetPeople(PeopleType type) { IPeople people = null; switch (type) { case PeopleType.RURAL: people = new Villagers(); break; case PeopleType.URBAN: people = new CityPeople(); break; default: break; } return people; }
public IPeople createPerson(PeopleType pt) { IPeople person = null; switch (pt) { case PeopleType.Bandit: person = new Bandits(); break; case PeopleType.Villager: person = new Villagers(); break; case PeopleType.CityFolk: person = new CityFolks(); break; } return person; }
public IPeople getPeople(PeopleType type) { IPeople person = null; switch (type) { case PeopleType.COUNTRY: people = new CountryPeople(); break; case PeopleType.CITY: people = new CityPeople(); break; default: break; } return(people); }
public List <People> GetInvitePeopleListByType(PeopleType type) { if (type == PeopleType.Firend) { return(GetFriendPeopleList()); } if (type == PeopleType.Clan) { return(GetClanPeopleList()); } if (type == PeopleType.Nearby) { return(GetNearbyPeopleList()); } Engine.Utility.Log.Error("没有取到数据!!!"); return(null); }
/// <summary> /// SayMorning方法,适应不同的人和不同的打招呼的方法 /// </summary> /// <param name="name"></param> /// <param name="peopleType"></param> public void SayMorning(string name, PeopleType peopleType) { switch (peopleType) { case PeopleType.Chiness: { Console.WriteLine($"早上好,{name}"); } break; case PeopleType.America: { Console.WriteLine($"Good Morning,{name}"); } break; default: throw new Exception("类型出错!"); } }
/// <summary> /// 中国人---晚上好 /// 美国人---good evening /// ... /// /// 假如要增加一个国家的人Malaysia,就得修改方法,增加一个分支 /// 任意分支变化 都得修改方法 /// 经常改动 很不稳定 难以维护 /// /// 增加公共逻辑方便 /// /// 为不同的人,进行不同的问候 /// 传递个变量---判断一下---执行对应的逻辑 /// 能不能直接点,直接传递逻辑呗 /// 逻辑就是方法---委托 /// </summary> /// <param name="name"></param> public void SayHi(string name, PeopleType peopleType) { Console.WriteLine("prepare SayHi.."); switch (peopleType) { case PeopleType.Chinese: Console.WriteLine($"{name},晚上好~"); break; case PeopleType.American: Console.WriteLine($"{name},good evening~"); break; case PeopleType.Malaysia: Console.WriteLine($"{name},*^%*^%^&%^%~"); break; default: //遇到不认识的枚举,说明调用有问题,那就不要隐藏,直接异常 throw new Exception("wrong peopleType"); } }
//中国人:晚上好 //美国人:good evening! //通过枚举判断,执行各自的业务逻辑 //如果新增一个国家的人,那么就修改这个方法 //如果业务升级,方法需要频繁的修改,方法很不稳定 //传参数peopleType 是判断之后执行逻辑,传参数是为了执行逻辑,参数不同逻辑又不一样,既然如此,能不能把这个逻辑直接传过来呢?逻辑是什么?逻辑不就是方法吗?如果把一个方法包裹之后传递呢? 委托 public void SayHi(string name, PeopleType peopleType) { Console.WriteLine("招手"); switch (peopleType) { case PeopleType.Chinese: Console.WriteLine($"{name}:晚上好!"); break; case PeopleType.American: Console.WriteLine($"{name}:good evening!"); break; case PeopleType.Japanese: Console.WriteLine($"{name}:#@%¥%……%%…!"); break; default: throw new Exception("枚举不存在!"); } }
public static IPeople GetPeople(PeopleType type) {