工厂设计模式
简单工厂
- 对生产对象进行统一管理
- 对外提供一个可调用的接口。
简单代码
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();
}
}