本文使用C#和Vuejs对简单工厂模式,工厂方法模式,抽象工厂模式进行了描述
分类:创建型模式
参见
//抽象汽车类,也可以是接口publicabstractclassCar{publicstringType{get;set;}}//特斯拉publicclassTesla:Car{publicTesla(){this.Type="电动力车";Console.Writeline("生产特斯拉电动汽车");}}//奔驰publicclassBenz:Car{publicBenz(){this.Type="汽油动力车";Console.WriteLine("生产奔驰汽车");}}//工厂publicclassCarFactory{//静态工厂方法publicstaticCarBuild(stringcarName){Carcar=null;if("Tesla"==carName){car=newTesla();}elseif("Benz"==carName){car=newBenz();}else{Console.WriteLine("没找到要生产的汽车Name");}returncar;}}//消费者publicclassCustomer{publicstaticvoidMain(String[]args){CarFactory.Build("Benz");CarFactory.Build("Tesla");CarFactory.Build("Audi");}}JavaScript示例
varCarFactory=(function(){varCar=function(carName,carType){this.CarName=carName;this.CarType=carType;};returnfunction(carName,carType){returnnewCar(carName,carType);}})();//消费varaudi=newCarFactory("Audi","汽油车");varbenz=newCarFactory("Benz","汽油车");vartesla=newCarFactory("Tesla","电动车");Vuejs示例
//抽象汽车类,也可以是接口publicabstractclassCar{publicstringType{get;set;}}//特斯拉publicclassTesla:Car{publicTesla(){this.Type="电动力车";Console.Writeline("生产特斯拉电动汽车");}}//奔驰publicclassBenz:Car{publicBenz(){this.Type="汽油动力车";Console.WriteLine("生产奔驰汽车");}}//工厂接口publicinterfaceICarFactory{publicCarBuild();}publicclassBenzFactory:ICarFactory{publicCarBuild(){returnnewBenz();}}publicclassTeslaFactory:ICarFactory{publicCarBuild(){returnnewTesla();}}//消费者publicclassCustomer{publicstaticvoidMain(String[]args){ICarFactoryfactory=null;CarteslaCar=null;CarbenzCar=null;//生产Teslafactory=newTeslaFactory();teslaCar=facotry.Build();//生产Benzfactory=newBenzFactory();benzCar=factory.Build();}}Vuejs示例
思考以下场景:假如我有三个对象
Carcar1=newTesla();Carcar2=newTesla();Carcar3=newTesla();那么此时我不想要Tesla了,我想换成Benz,此时是不是需要修改三处(可能分散在系统各个类库里),这个时候工厂方法模式的好处在哪里体现呢?
CarFactoryfactory=newTeslaFactory();Carcar1=factory.build();Carcar2=factory.build();Carcar3=factory.build();这个时候,要换成Benz,就修改
CarFactoryfactory=newBenzFactory();一处就可以了。
别忘了,你在加Teacher的时候,是符合开闭原则的,而简单工厂模式是不符合的。
生产Tesla电动车生产Tesla自行车生产奔驰汽油车生产奔驰自行车Vuejs示例
就类似这种结构的对象关系都可以用抽象工厂模式来构造。。。。。