抽象工厂
随着我们业务的不断复杂,我们的设计模式要需要作出调整。工厂设计模式的最终状态就是抽象工厂。那什么是抽象工厂呢?简单工厂,我们抽象出来的是产品,工厂方法,我们抽象出来的是工厂。而抽象工厂,就是把产品和工厂都抽象出来。保证每个工厂生产此工厂对应的产品类型。
回到代码层面
第一步:我们先把产品抽象出来,为什么先抽象产品呢?因为我们需要根据产品的种类来确定工厂的种类。
1.抽取所有产品的基类
package cn.zl.AbstractFactory;
// 所有产品的基类
public interface Product {
}
2.产品,我们为了显得业务很复杂,我们再分为产品A,产品B。
产品A的基类
package cn.zl.AbstractFactory;
// 产品A的父类
public interface ProductA extends Product {
}
产品B的基类
package cn.zl.AbstractFactory;
// 产品B的基类
public interface ProductB extends Product{
}
3.产品的具体实现类,A类产品,分为A1,A2。B类产品,分为B1,B2。代码如下:
package cn.zl.AbstractFactory;
public class ProductA_1 implements ProductA{
ProductA_1(){
// 产品A1
}
}
package cn.zl.AbstractFactory;
public class ProductA_2 implements ProductA{
ProductA_2(){
// 产品A2
}
}
package cn.zl.AbstractFactory;
public class ProductB_1 implements ProductB{
ProductB_1(){
// 产品B1
}
}
package cn.zl.AbstractFactory;
public class ProductB_2 implements ProductB{
ProductB_2(){
// 产品B2
}
}
第二步:开始抽象工厂基类。
1.所有工厂对象的父类
package cn.zl.AbstractFactory;
// 所有工厂的父类
public interface Factory {
}
2.创建工厂A和工厂B的实现类。
package cn.zl.AbstractFactory;
// 工厂A类
public class FactoryProductA implements Factory{
public Product getProductA_1(){
return new ProductA_1();
}
public Product getProductA_2(){
return new ProductA_2();
}
}
package cn.zl.AbstractFactory;
// 工厂B类
public class FactoryProductB implements Factory{
public Product getProductB_1(){
return new ProductB_1();
}
public Product getProductB_2(){
return new ProductB_2();
}
}
这样我们就完成了抽象工厂的案例。接下来,我们就测试一下。
package cn.zl.AbstractFactory;
public class Main {
public static void main(String[] args) {
// 生产productA1产品
Product productA_1 = new FactoryProductA().getProductA_1();
// 生产productA2产品
Product productA_2 = new FactoryProductA().getProductA_2();
// 生产product1产品
Product productB_1 = new FactoryProductB().getProductB_1();
// 生产productAB2产品
Product productB_2 = new FactoryProductB().getProductB_2();
}
}
好了,工厂设计模式,差不多完了,消化消化。在实际的工作中,懂设计模式更多的是帮助我们了解一些三方件的源码。这样我们很容易的搞清楚三方件的核心类。
网友评论