工廠方法模式(重要):
又叫工廠模式或多態工廠,工廠父類負責定義具體實例化類的公共接口,工廠子類負責生成具體的實例化對象,目的是將實例化操作交給工廠子類完成,在程序運行時再確定具體工廠子類的類型,用子類對象覆蓋父類對象
工廠模式的使用環境:
1.不需要知道要實例化對象的類名,不關心對象創建的細節,只需要知道其對應的具體工廠類
2.使用多態機制和里氏代換原則,將對象的創建交給具體工廠子類,在程序運行時再確定具體工廠子類的類型,用子類對象覆蓋父類對象
工廠方法的優點:
1.將對象的創建和使用分離,不關心對象創建的細節,不需要知道要創建類的類名
2.當加入新的類時,無須修改原有的代碼,只需要增加新類和具體工廠類即可,符合開閉原則
工廠方法的缺點:
1.增加新類時,系統中類的個數成對增加,增加了系統的複雜度
2.引入了抽象層,增加了系統的抽象性和理解難度
工廠方法模式例子:
要實例化類的父接口
public interface Animal {
void eat();
}
要實例化的Dog類
public class Dog implements Animal{
/**
* @Description: TODO
* @author doudou
* @date 2019年10月6日
* @throws
* @return
* @see creation.SimpleFactoryPattern.Animal#eat()
*/
@Override
public void eat() {
System.out.println("小狗喫骨頭。。。");
}
}
要實例化的Cat類
public class Cat implements Animal{
/**
* @Description: TODO
* @author doudou
* @date 2019年10月6日
* @throws
* @return
* @see creation.SimpleFactoryPattern.Animal#eat()
*/
@Override
public void eat() {
System.out.println("小貓喫魚。。。");
}
}
抽象工廠父接口
public interface AnimalFactory {
Animal getAnimal();
}
具體工廠DogFactory類
public class DogFactory implements AnimalFactory{
/**
* @Description: TODO
* @author doudou
* @date 2019年10月7日
* @return
* @throws
* @return
* @see creation.FactoryMethodPattern.AnimalFactory#getAnimal()
*/
@Override
public Animal getAnimal() {
return new Dog();
}
}
具體工廠CatFactory類
public class CatFactory implements AnimalFactory{
/**
* @Description: TODO
* @author doudou
* @date 2019年10月7日
* @return
* @throws
* @return
* @see creation.FactoryMethodPattern.AnimalFactory#getAnimal()
*/
@Override
public Animal getAnimal() {
return new Cat();
}
}