設計模式系列之工廠方法模式
阿新 • • 發佈:2018-12-21
學習的最好方法是實踐,如果不去使用設計模式,永遠也感覺不到它的獨到之處!週六沒事在家看了一個大神的文章《》,感觸很深,大神提到了重構和程式碼設計,就想到學下設計模式,沒事經常重構優化下程式碼,而且忍不住把大神的部落格翻了一遍,學到了不少很實用(可以直接拿來用的)東西,之間把設計模式專門先跳過了,現在開始跟著複習下:
類圖:
程式碼
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);
}
}
總結 工廠方法模式好處就是符合“開閉原則”,
本例子還使用了匿名內部類,這樣我們就省去了兩個具體工廠類,如果我們再新增新的類,只需要加一個具體類即可,而不用去改變其他的類。