文章目录
类结构
工厂方法模式
工厂类
封装多个生产不同产品的实现方法
产品类
封装产品相关的属性和操作
不同的产品封装成不同的产品类
类之间的关系
工厂和产品之间的关系是一对多,一个工厂生产多个产品
抽象工厂模式
工厂相关类
工厂的抽象类/接口
定义生产产品的抽象方法
工厂的具体类
实现生产产品的抽象方法
产品相关类
产品的抽象类/接口
定义产品相关的抽象方法
产品的具体类
实现产品相关的抽象方法
类之间的关系
工厂和产品之间是一对一的关系,一个工厂只生产一个产品
同样是面向接口,MVP与访问者模式,为了实现多对多,而抽象工厂为了实现一对一
小结
抽象工厂可以看作工厂方法的升级,当工厂方法中工厂类过于复杂,可以将其升级为抽象工厂
代码实例
工厂方法模式
工厂类
public class Factory {
public Product1 createProduct1() {
return new Product1();
}
public Product2 createProduct2() {
return new Product2();
}
public Product3 createProduct3() {
return new Product3();
}
public Product4 createProduct4() {
return new Product4();
}
}
产品类
public class Product1 {
... ...
}
public class Product2 {
... ...
}
public class Product3 {
... ...
}
public class Product4 {
... ...
}
抽象工厂模式
工厂相关类
public interface Factory {
Product creaetProduct();
}
public class Factory1 implements Factory {
public Product creaetProduct() {
return new Product1();
}
}
public class Factory2 implements Factory {
public Product creaetProduct() implements Factory {
return new Product2();
}
}
public class Factory3 implements Factory {
public Product creaetProduct() implements Factory {
return new Product3();
}
}
public class Factory4 implements Factory {
public Product creaetProduct() {
return new Product4();
}
}
产品相关类
public interface Product {}
public class Product1 implements Product {}
public class Product2 implements Product {}
public class Product3 implements Product {}
public class Product4 implements Product {}
总结
工厂方法,一个工厂生产多个产品
抽象工厂,一个工厂生产一个产品
抽象工厂可以看作工厂方法的升级,当工厂方法中工厂类代码过于复杂,可以将其改成为抽象工厂,降低工厂类的代码复杂