学习的最好方法是实践,如果不去使用设计模式,永远也感觉不到它的独到之处!周六没事在家看了一个大神的文章《细思极恐-你真的会写java吗?》,感触很深,大神提到了重构和代码设计,就想到学下设计模式,没事经常重构优化下代码,而且忍不住把大神的博客翻了一遍,学到了不少很实用(可以直接拿来用的)东西,之间把设计模式专门先跳过了,现在开始跟着复习下:
类图:
代码
interface Animal
public interface Animal {
void eat();
void say();
}
interface AnimalFactory
public interface AnimalFactory {
Animal getAnimal();
}
class Cat implements Animal
public class Cat implements Animal {
@Override
public void eat() {
System.out.println("I am a cat,eat fish");
}
@Override
public void say() {
System.out.println("I am a cat,eat miao");
}
public static AnimalFactory factory = new AnimalFactory() {
@Override
public Animal getAnimal() {
return new Cat();
}
};
}
class Dog implements Animal
public class Dog implements Animal {
@Override
public void eat() {
System.out.println("I am a DOG,eat gutou");
}
@Override
public void say() {
System.out.println("I am a DOG,say wang");
}
public static AnimalFactory factory = new AnimalFactory() {
@Override
public Animal getAnimal() {
return new Dog();
}
};
}
具体使用
Factories
public class Factories {
static void serviceConsumere(AnimalFactory factory){
Animal a = factory.getAnimal();
a.eat();
a.say();
}
public static void main(String []args){
serviceConsumere(Cat.factory);
serviceConsumere(Dog.factory);
}
}
总结
工厂方法模式好处就是符合“开闭原则”,
本例子还使用了匿名内部类,这样我们就省去了两个具体工厂类,如果我们再添加新的类,只需要加一个具体类即可,而不用去改变其他的类。