測試類
package org.westos.常用的設計模式.簡單工廠模式;
//這是一個簡單工廠模式的測試類
/**
* 簡單工廠模式:
* 優點:
* 不需要再創建具體的對象,把創建的工作交給了工廠類(這個類私有化了構造方法,所提提供的方法爲靜態方法,調用使用類名.方法名)
* 缺點:
* 如果有新的類增加,構造方法不同,就需要去修改工廠類,不符合設計原則開閉原則
* */
public class Demo {
public static void main(String[] args) {
Animal cat = AnimalFactory.createAnimal("Cat");
cat.eat();
Animal dog = AnimalFactory.createAnimal("Dog");
dog.eat();
System.out.println("----------------");
Animal a = AnimalFactory.createAnimal("Cat");
a.eat();
a = AnimalFactory.createAnimal("Dog");
a.eat();
a = AnimalFactory.createAnimal("Pig");
if(a!=null) {
a.eat();
}else {
System.out.println("工廠類不提供該類");
}
}
}
抽象類
package org.westos.常用的設計模式.簡單工廠模式;
//這是一個抽象類,提供了一個Animal類
public abstract class Animal {
//這是抽象類Animal的共有功能
public abstract void eat();
}
具體類
package org.westos.常用的設計模式.簡單工廠模式;
//這是一個具體類貓,繼承了Animal類
public class Cat extends Animal {
//重寫Animal類的抽象方法
@Override
public void eat() {
System.out.println("貓吃魚");
}
}
package org.westos.常用的設計模式.簡單工廠模式;
//這是一個具體類狗,繼承了Animal類
public class Dog extends Animal {
//重寫Animal類的抽象方法
@Override
public void eat() {
System.out.println("狗吃骨頭");
}
}
工廠類
package org.westos.常用的設計模式.簡單工廠模式;
//這是一個工廠類,用來創建各種具體類的對象
//採用的是多態的方式,Animal 對象名 = new 具體類();
public class AnimalFactory {
private AnimalFactory(){}
public static Animal createAnimal(String str) {
if(str.equals("Cat")) {
return new Cat();
}else if(str.equals("Dog")) {
return new Dog();
}
return null;
}
}