浏览 1732 次
锁定老帖子 主题:学习工厂模式
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-11-26
最后修改:2008-12-05
今天了解了工厂模式,总结下: 首先是简单工厂模式,大家在开发中经常用到,感觉就是在类里面增加一些静态方法,这个类就是工厂类,以后调用这些方法时不用实例化此类。 一个例子,动物有吃,喝的功能,写个动物接口。 public interface Animal { public void eat(); public void drink(); }
猫,狗继承动物,就有了这两个功能。 public class Cat implements Animal { public void drink() { } public void eat() { } }
public class Dog implements Animal { public void drink() { } public void eat() { } } 宠物店可以提供这两种动物 public class PetShop { public static Dog dogAdopt(){ return new Dog(); }; public static Cat catAdopt(){ return new Cat(); }; } 这个类就是静态工厂类。 人们可以通过此类进行领养动物。 public class People { private Cat whitecat; private Cat blackcat; public void test(){ this.whitecat=PetShop.catAdopt(); this.blackcat=PetShop.catAdopt(); whitecat.drink(); blackcat.eat(); } } 可以领养白猫,或者黑猫,并且也具有吃喝的功能。 此例说了下静态工厂类。 如果宠物店还需要增加动物品种怎么办,就要在静态工厂类增加动物品种,如老虎。这样就不能面向接口编程
工厂方法模式就可以改变这些。 修改PetShop.java public interface PetShop { public Animal animalAdopt(); } 增加的品种都可以继承这个类 public class DogAdopt implements PetShop { //返回狗的实例,领养狗 public Animal animalAdopt() { return new Dog(); } }
public class CatAdopt implements PetShop { //返回猫的实例领养猫 public Animal animalAdopt() { return new Cat(); } }
这里也可以增加老虎的实例,进行领养。只将接口(宠物点)暴露给用户。至于增加什么品种,用户不知道。用户只用知道自己想要的。 public class People { private Cat whitecat; private Cat blackcat; public void test(){ CatAdopt a = new CatAdopt(); this.whitecat= (Cat) a.animalAdopt(); this.blackcat=(Cat) a.animalAdopt(); whitecat.drink(); blackcat.eat(); } }
写这些只为学习,有理解错误的地方请批评 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |