使用Activator.CreateInstance完善简单工厂
生活随笔
收集整理的這篇文章主要介紹了
使用Activator.CreateInstance完善简单工厂
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?????????
public??interface?IFruit?? {?? ?????????? }?? public?class?Apple:IFruit?? {?? ????????public?Apple()?? ????????{?? ????????????Console.WriteLine("An?apple?is?got!");?? ????????}?? }?? ?? public?class?Orange:IFruit?? ????{?? ????????public?Orange()?? ????????{?? ????????????Console.WriteLine("An?orange?is?get!");?? ????????}?? ????}?? ?? public?class?FruitFactory?? ????{?? ????????public?IFruit?MakeFruit(String?name)?? ????????{?? ????????????switch?(name)?? ????????????{??? ????????????????case?"Orange":?? ????????????????????return?new?Orange();?? ????????????????????break;?? ????????????????case?"Apple":?? ????????????????????return?new?Apple();?? ????????????????????break;?? ????????????????default:?? ????????????????????return?null;?? ????????????}?? ????????????IFruit?MyFruit?=?null;?? ????????????try?? ????????????{?? ?? ????????????????var?assembly?=?Assembly.GetExecutingAssembly();?? ????????????????var?types?=?assembly.GetTypes();?? ?????????????????? ????????????????foreach?(var?type?in?types)?? ????????????????{?? ????????????????????if?(type.Name?==?name)?? ????????????????????{?? ????????????????????????Type?t?=?Type.GetType(type.ToString());?? ????????????????????????MyFruit?=Activator.CreateInstance(t)?as?IFruit;?? ????????????????????}?? ????????????????}?? ????????????????? ????????????}?? ????????????catch?(Exception?ex)?? ????????????{?? ????????????????Console.WriteLine(ex.Message);??? ????????????}?? ????????????return?MyFruit;?? ?????????????? ?????????????? ????????}?? ????}?? }?? ?? -----------------------------------------?? ?? class?Program?? ????{?? ????????static?void?Main(string[]?args)?? ????????{?? ????????????String?fruitName?=?Console.ReadLine();?? ????????????Console.WriteLine("you?need?to?get?{0}",?fruitName);?? ????????????IFruit?fruit?=?null;?? ????????????FruitFactory?factory?=?new?FruitFactory();?? ????????????fruit?=?factory.MakeFruit(fruitName);?? ?????????????? ?????? ????????????Console.Read();?? ????????}?? ?????????? ????}??
?前幾天在項目中看到別人的工廠類使用Activator.CreateInstance() 之前用簡單工廠都是用switch ...case ,之前沒有用過便查了查資料,正是這個方法+ 反射簡化了工廠模式,在需求增加的情況可以不動工廠類和客戶端, 也符合開放封閉原則。 ?反射的地方用的不多, 后續會再加上一些例子。
?
?
?
?
[c-sharp]?view plaincopyprint?
總結
以上是生活随笔為你收集整理的使用Activator.CreateInstance完善简单工厂的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在英特尔® 凌动™ 处理器上将 Open
- 下一篇: 根据目标选择减肥方法 少做无用功