工廠設計模式
簡單工廠
- 對生產對象進行統一管理
- 對外提供一個可調用的接口。
簡單代碼
public class Cat {
}
public class Dog {
}
簡單工廠對外輸出
public class SimpleFactory {
public static Dog getDog() {
return new Dog();
}
public static Cat getCat() {
return new Cat();
}
}
調用抽象工廠生產對象
public class Main {
public static void main(String[] args) {
Cat cat = SimpleFactory.getCat();
Dog dog = SimpleFactory.getDog();
}
}
簡單工廠的缺點
- StaticFactroy類不斷修改,裏面的方法不斷增多
- 不符合單一職責原則: 一個類負責了所有類的生產
- 不符合開閉原則:擴展品類是,需要修改工廠類
工廠方法模式
- 工廠類抽象出一個接口,對象的創建方法延遲到工廠子類去實現
步驟
- 工廠方法模式中,將工廠方法抽象出來,成單獨接口
- 每一個子類只需要實現工廠類
public interface Factory<T> {
public T fruit();
}
public class CarFactory implements Factory<CarFactory>{
@Override
public CarFactory fruit() {
return new CarFactory();
}
}
public class ProductFactory implements Factory<ProductFactory>{
@Override
public ProductFactory fruit() {
return new ProductFactory();
}
}
public class MainFactory {
public static void main(String[] args) {
Factory carFactory = new CarFactory();
carFactory.fruit();
Factory productFactory = new ProductFactory();
productFactory.fruit();
}
}
抽象工廠
當一個類別的產品還有很多個系列區分
/**
* 定義抽象工廠
*/
public abstract class AbstractFactory {
/**
* 獲取顏色信息
* @return
*/
public abstract String getColor();
public abstract String getHeight();
}
public class Cat extends AbstractFactory {
@Override
public String getColor() {
return null;
}
@Override
public String getHeight() {
return null;
}
}
public class Fruit extends AbstractFactory {
@Override
public String getColor() {
return null;
}
@Override
public String getHeight() {
return null;
}
}
public class Cat extends AbstractFactory {
@Override
public String getColor() {
return null;
}
@Override
public String getHeight() {
return null;
}
}
public class Main {
public static void main(String[] args) {
AbstractFactory cat = new Cat();
AbstractFactory fruit = new Fruit();
}
}