下面讲一个实例,相信很多人已经看过: 话说十年前,有一个暴发户,他家有三辆汽车——Benz奔驰、Bmw宝马、Audi奥迪,还雇了司机为他开车。不过,暴发户坐车时总是怪怪的:上Benz车后跟司机说“开奔驰车!”,坐上Bmw后他说“开宝马车!”,坐上Audi说“开奥迪车!”。你一定说:这人有病!直接说开车不就行了?! 而当把这个暴发户的行为放到我们程序设计中来时,会发现这是一个普遍存在的现象。幸运的是,这种有病的现象在OO(面向对象)语言中可以避免了。下面就以C#语言为基础来引入我们本文的主题:工厂模式的工厂方法。//抽象产品角色public interface Car { string drive(; }
//具体产品角色,具体类的实现public class BenzCar : Car { public string drive( { return "Driving Benz"; } } public class BmwCar : Car { public string drive( 1 { return "Driving Bmw"; } }
//工厂类角色,本模式的核心选择实体工厂public static Car DriverCar(string category { switch(category { case "Benz": return new BenzCar(; break; case "BmwCar": return new BmwCar(; break; default: return null; } } //这里用户只需选择要开什么车就ok啦 protected void Page_Load(object sender, EventArgs e { Car car = Driver.DriverCar("Benz"; Response.Write(car.drive(; } 工厂部分好像不太理想,因为每增加一辆车,都要在工厂类中增加相应的业务逻辑或者判断逻辑。抽象工厂模式能改变这一点。也就可以用条件外置(在web.config里面配置)和反射(加载实体的产品)来实现