一、前言 同样在上班的路上,一个程序员想着是买梅干菜肉包还是买酸辣粉丝包,到了包子点却发现只有馒头馅子的包子了,却买了一包豆浆; 一个程序员可能在在家吃完饭开车去上班了,这尼玛是富二代; 一个程序员可能想着如何把自己的代码如何优化,如何提高性能,如何的如何…… 上班路上的程序员让你轻松了解三个设计模式 二、简单工厂模式简单工厂模式(SimpleFactoryPattern):又称为静态工厂方法(StaticFactoryMethod)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。 简单工厂模式就好比一个是一个富二代程序员,你要什么,简单工厂就给你什么。 简单工厂模式包括三个角色:抽象产品角色,具体产品角色,工厂角色 代码实现如下: //抽象产品角色:交通工具车publicabstractclassCar{publicvirtualvoidGoToWork(){}}//具体产品角色:自行车publicclassBike:Car{publicoverridevoidGoToWork(){Console.WriteLine(骑自行车去上班);}}//具体产品角色:公交车publicclassBus:Car{publicoverridevoidGoToWork(){Console.WriteLine(做公交车去上班);}}//工厂角色:简单工厂类publicclassSimpleFactory{publicstaticCarCreateSimple(stringstr){Carsimple=null;switch(str){caseBike:simple=newBike();break;caseBus:simple=newBus();break;//……}returnsimple;}} 客户端调用代码: //根据客户端传入的参数简单工厂决定如何去上班Carcar=SimpleFactory.CreateSimple(Bus);car.GoToWork();三、工厂方法模式 工厂方法模式(FactoryMethodPattern)又称为工厂模式,也叫虚拟构造器(VirtualConstructor)模式或者多态工厂(PolymorphicFactory)模式,它属于类创建型模式。在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。 工厂方法模式包括四个角色:抽象产品角色,具体产品角色,抽象工厂角色,具体工厂角色 具体示例代码实现如下: //抽象产品角色:交通工具车publicabstractclassCar{publicvirtualvoidGoToWork(){}}//具体产品角色:自行车publicclassBike:Car{publicoverridevoidGoToWork(){Console.WriteLine(骑自行车去上班);}}//具体产品角色:公交车publicclassBus:Car{publicoverridevoidGoToWork(){Console.WriteLine(做公交车去上班);}}//抽象工厂角色:工厂接口publicinterfaceIFactory{CarByWhatWay();}//具体工厂类:自行车类publicclassBikeFactory:IFactory{publicCarByWhatWay(){returnnewBike();}}//具体工厂类:公交车类publicclassBusFactory:IFactory{publicCarByWhatWay(){returnnewBus();}} 客户端调用代码: //根据客户端实例化的工厂决定如何去上班IFactoryfactory=newBusFactory();//常规写法//反射优化(BusFactory)Assembly.Load(当前程序集名称).CreateInstance(当前命名空间名称.要实例化的类名)//usingSystem.Reflection;引用命名空间//varfactoryName=BusFactory;//IFactoryfactory=(BusFactory)Assembly.Load(当前程序集名称).CreateInstance(当前命名空间名称.+factoryName);Carcar=factory.ByWhatWay();car.GoToWork();四、抽象工厂模式 抽象工厂模式(AbstractFactoryPattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。 抽象工厂模式包括四个角色:抽象产品角色,具体产品角色,抽象工厂角色,具体工厂角色 具体示例代码如下: //抽象交通工具车publicabstractclassCar{//名字publicstringCarName{get;set;}publicvirtualstringGoToWork(){returnCarName;}}//抽象早饭类publicabstractclassBreakFast{//早饭名称publicstringFoodName{get;set;}publicvirtualstringEat(){returnFoodName;}}//自行车publicclassBike:Car{publicoverridestringGoToWork(){CarName=骑着自行车;returnCarName;}}//公交车publicclassSuv:Car{publicoverridestringGoToWork(){CarName=开着SUV汽车;returnCarName;}}//高逼格早饭:三明治牛奶publicclassSandWichAndMilk:BreakFast{publicoverridestringEat(){FoodName=三明治和牛奶;returnFoodName;}}//苦逼早饭:包子豆浆publicclassBaoziAndDoujiang:BreakFast{publicoverridestringEat(){FoodName=包子豆浆;returnFoodName;}}//抽象工厂类publicabstractclassAbstractFactory{//创建交通工具方法publicabstractCarCreatCar();//创建早饭方法publicabstractBreakFastCreateBreakFast();}//具体工厂类:苦逼程序员publicclassLowFactory:AbstractFactory{publicoverrideCarCreatCar(){returnnewBike();}publicoverrideBreakFastCreateBreakFast(){returnnewBaoziAndDoujiang();}}//具体工厂类:高逼格程序员publicclassHighFactory:AbstractFactory{publicoverrideCarCreatCar(){returnnewSuv();}publicoverrideBreakFastCreateBreakFast(){returnnewSandWichAndMilk();}}publicclassCoderLove{privateCarcar;privateBreakFastbreakFast;publicCoderLove(AbstractFactoryfac){car=fac.CreatCar();breakFast=fac.CreateBreakFast();}publicvoidGetCoderLove(){Console.WriteLine(早饭吃完+breakFast.Eat()+,+car.GoToWork()+去上班);}} 客户端调用: AbstractFactoryfactory=newHighFactory();CoderLovecoder=newCoderLove(factory);coder.GetCoderLove(); 抽象工厂模式隔离了具体类的生成,使得客户并不需要知道什么被创建。 由于这种隔离,更换一个具体工厂就变得相对容易。所有的具体工厂都实现了抽象工厂中定义的那些公共接口,因此只需改变具体工厂的实例,就可以在某种程度上改变整个软件系统的行为。 除了以上苦逼程序员,高逼格程序员,还可以具体添加一个开车SUV吃着包子豆浆的具体工厂,也可以添加骑着自行车吃着三明治牛奶的具体工厂。 五、总结1、这个三个模式都属于对象创建型模式 2、简单工厂模式简单的理解为客户端告诉工厂他想要什么实例,工厂就给生产什么实例 3、工厂方法模式可以理解客户端有了创建实例的机器,他想要什么实例就自己生产什么实例 4、抽象工厂模式最常见的情况是一套程序需要多套数据实现的情况下 儿童白癜风如何治疗北京看白癜风哪家医院最专业转载请注明原文网址:http://www.helimiaopu.com/cxfz/cxfz/3700.html |