1. 程式人生 > >設計模式系列之工廠方法模式

設計模式系列之工廠方法模式

學習的最好方法是實踐,如果不去使用設計模式,永遠也感覺不到它的獨到之處!週六沒事在家看了一個大神的文章《》,感觸很深,大神提到了重構和程式碼設計,就想到學下設計模式,沒事經常重構優化下程式碼,而且忍不住把大神的部落格翻了一遍,學到了不少很實用(可以直接拿來用的)東西,之間把設計模式專門先跳過了,現在開始跟著複習下:

類圖: 

 程式碼

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);
    }

}

總結          工廠方法模式好處就是符合“開閉原則”,

         本例子還使用了匿名內部類,這樣我們就省去了兩個具體工廠類,如果我們再新增新的類,只需要加一個具體類即可,而不用去改變其他的類。