今天了解了工厂模式,总结下:
首先是简单工厂模式,大家在开发中经常用到,感觉就是在类里面增加一些静态方法,这个类就是工厂类,以后调用这些方法时不用实例化此类。
一个例子,动物有吃,喝的功能,写个动物接口。
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();
}
}
写这些只为学习,有理解错误的地方请批评