说道工厂,直接肯定是所谓的静态工厂(简单工厂)模式,呵呵,听着好高端,其实我觉得工厂模式除了抽象工厂还能说是有点模式可言,静态是在是太扯了。静态只能说是个封装。低端至极可还是被很多面试的人说的貌似知道了就很厉害似得。哎,制度害死人,就好像高考、考文凭似得,你就得去了解去看,虽然你确切知道现在对你一点用都没有,而且你也确定当你用到的时候已经忘光了。可制度是死的,人也必须死。
好了。假如你要创建一个对象是food,好了看来是你饿了。然后你会想new Food(),很好,但是你想了想,我怎么能这么笼统呢,这里吐槽了,我天天没吃的,好惨,没家没伴的孩子,看到其他房间里的小夫妻小日子过的、小菜烧的风生水起,好凄凉啊。好了,但是你还是有很多东西吃的,于是乎你今天要new Noodle(),明天还要new Bread(),后天balabala...,好了,为解决你的问题,首先我装模做样来了个FoodFactory,这样代表什么,有的时候名称的确代表一些,虽然对代码水平没任何体现,可这模式就是这样。。。一个名词一个继承一个重载哪怕一个方法引用都可以拿来大做文章。所以FoodFactory里面就是提供了一个static方法createFood(Stirng foodType),看到这个方法大家就知道了,foodType就传“bread”之类的具体食物名称就行了。OK,最后吧Noodle、Bread继承Food,就行,切换实现的时候代码直接改字符串,其他代码不要改。当然,工厂还有好处就是new对象的时候必须经过这个方法,所以你就可以加逻辑这里控制实例化的条件。其实不看文章自己也能琢磨出来这个所谓的静态工厂方法。
第二种,在我眼里的确有点模式的感觉,不过,我所谓的模式的感觉其实就是大家一直很向往的面向接口编程。呵呵,面向接口,多么抽象和遥不可及,不过,这是一个过程。
还是吃,还是有个工厂生产这些食品,可是,屌丝只能吃街边生产的,高富帅可以选择吃饭店里的。好了两个类StreetFoodFactory,RestaurantFoodFactory。既然都会生产noodle和bread,那么好了,这里就得面向接口了,我们就写一个接口,FoodFactory,好了,里面两个抽象方法,OK。实现类自己去实现就好了。 调用的时候选择new不同的类型就行。呵呵,为什么说这个是一个模式,因为他使用了接口,让你主动去建立这个关系。如果我们一直有这个思想去编程,相信你会发现你的代码是那么的丰满。
好了,最后呢,一般都会抛出一个问题,我就俗点吧,有些东西虽然讲出来了,其实真的没必要,不过面试过日子嘛,不是你要会,是你要让别人觉得你会。就是简单工厂的noodle只能是一种品牌,但是当你还有另一个food假如是rice,好了,直接修改工厂类,添加就行。抽象工厂能,可以有多个品牌的食物,可是当你要做rice时,你完蛋了,工厂越多你越麻烦,专业点说你违背了”开闭“原则。
不多说了,反正我就是瞎说,呵呵。
好了。假如你要创建一个对象是food,好了看来是你饿了。然后你会想new Food(),很好,但是你想了想,我怎么能这么笼统呢,这里吐槽了,我天天没吃的,好惨,没家没伴的孩子,看到其他房间里的小夫妻小日子过的、小菜烧的风生水起,好凄凉啊。好了,但是你还是有很多东西吃的,于是乎你今天要new Noodle(),明天还要new Bread(),后天balabala...,好了,为解决你的问题,首先我装模做样来了个FoodFactory,这样代表什么,有的时候名称的确代表一些,虽然对代码水平没任何体现,可这模式就是这样。。。一个名词一个继承一个重载哪怕一个方法引用都可以拿来大做文章。所以FoodFactory里面就是提供了一个static方法createFood(Stirng foodType),看到这个方法大家就知道了,foodType就传“bread”之类的具体食物名称就行了。OK,最后吧Noodle、Bread继承Food,就行,切换实现的时候代码直接改字符串,其他代码不要改。当然,工厂还有好处就是new对象的时候必须经过这个方法,所以你就可以加逻辑这里控制实例化的条件。其实不看文章自己也能琢磨出来这个所谓的静态工厂方法。
第二种,在我眼里的确有点模式的感觉,不过,我所谓的模式的感觉其实就是大家一直很向往的面向接口编程。呵呵,面向接口,多么抽象和遥不可及,不过,这是一个过程。
还是吃,还是有个工厂生产这些食品,可是,屌丝只能吃街边生产的,高富帅可以选择吃饭店里的。好了两个类StreetFoodFactory,RestaurantFoodFactory。既然都会生产noodle和bread,那么好了,这里就得面向接口了,我们就写一个接口,FoodFactory,好了,里面两个抽象方法,OK。实现类自己去实现就好了。 调用的时候选择new不同的类型就行。呵呵,为什么说这个是一个模式,因为他使用了接口,让你主动去建立这个关系。如果我们一直有这个思想去编程,相信你会发现你的代码是那么的丰满。
好了,最后呢,一般都会抛出一个问题,我就俗点吧,有些东西虽然讲出来了,其实真的没必要,不过面试过日子嘛,不是你要会,是你要让别人觉得你会。就是简单工厂的noodle只能是一种品牌,但是当你还有另一个food假如是rice,好了,直接修改工厂类,添加就行。抽象工厂能,可以有多个品牌的食物,可是当你要做rice时,你完蛋了,工厂越多你越麻烦,专业点说你违背了”开闭“原则。
不多说了,反正我就是瞎说,呵呵。