设计模式-5-抽象工厂

简介:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类

目的:简单工厂的扩展

总结:简单工厂中,抽象工厂接口创建抽象产品的方法,和抽象产品从一个变成多个

     1,首先从简单工厂进化到工厂方法,是因为工厂方法弥补了简单工厂对修改开放的弊端,即简单工厂违背了开闭原则。
     2,从工厂方法进化到抽象工厂,是因为抽象工厂弥补了工厂方法只能创造一个系列的产品的弊端。

组成:工厂接口, 工厂接口实现类, 具体产品的接口, 产品实现类

一,工厂接口

package com.design.e.factory.abstrac;

/**
 * 抽象工厂模式
 */
public interface CoreFactory {
    
    AproductService createAproduct();
    BproductService createBproduct();
}

二,工厂接口实现类

package com.design.e.factory.abstrac;
/**
 * 指定产品的具体工厂
 */
public class Machine1Factory implements CoreFactory {

    @Override
    public AproductService createAproduct() {
        
        return new ProductA1();
    }

    @Override
    public BproductService createBproduct() {
        
        return new ProductB1();
    }

}
package com.design.e.factory.abstrac;
/**
 * 指定产品的具体工厂
 */
public class Machine2Factory implements CoreFactory {

    @Override
    public AproductService createAproduct() {
        
        return new ProductA2();
    }

    @Override
    public BproductService createBproduct() {
        
        return new ProductB2();
    }

}

三,具体产品接口

package com.design.e.factory.abstrac;
/**
 * 抽象A产品接口
 */
public interface AproductService {

    void create();
}
package com.design.e.factory.abstrac;
/**
 * 抽象B产品接口
 */
public interface BproductService {

    void create();
}

四,具体产品实现

package com.design.e.factory.abstrac;
/**
 * 具体产品
 */
public class ProductA1 implements AproductService {

    @Override
    public void create() {
        System.out.println(" 生产A类别--A1型号");
    }

}
package com.design.e.factory.abstrac;
/**
 * 具体产品
 */
public class ProductA2 implements AproductService {

    @Override
    public void create() {
        System.out.println(" 生产A类别--A2型号");
    }

}
package com.design.e.factory.abstrac;
/**
 * 具体产品
 */
public class ProductB1 implements BproductService {

    @Override
    public void create() {
        System.out.println(" 生产B类别--B1型号");
    }

}
package com.design.e.factory.abstrac;
/**
 * 具体产品
 */
public class ProductB2 implements BproductService {

    @Override
    public void create() {
        System.out.println(" 生产B类别--B2型号");
    }

}

Main:

package com.design.e.factory.abstrac;
/**
 * 抽象工厂模式
 * 
 * 抽象工厂,抽象产品
 * 
 * 1,首先从简单工厂进化到工厂方法,是因为工厂方法弥补了简单工厂对修改开放的弊端,即简单工厂违背了开闭原则。
 * 2,从工厂方法进化到抽象工厂,是因为抽象工厂弥补了工厂方法只能创造一个系列的产品的弊端。
 */
public class MainTest {

    public static void main(String[] args) {
        
        CoreFactory machineFactory = new Machine1Factory();
        AproductService productA = machineFactory.createAproduct();
        productA.create();
        BproductService productB = machineFactory.createBproduct();
        productB.create();
        
        machineFactory = new Machine2Factory();
        productA = machineFactory.createAproduct();
        productA.create();
        productB = machineFactory.createBproduct();
        productB.create();
    }
}

Result:

 生产A类别--A1型号
 生产B类别--B1型号
 生产A类别--A2型号
 生产B类别--B2型号
原文地址:https://www.cnblogs.com/wanhua-wu/p/7201240.html