栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

设计模式之抽象工厂模式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

设计模式之抽象工厂模式

什么是设计模式
设计模式是经常使用、大多数人知道,有特定目录的代码设计经验。设计模式可以提高代码可维护性,可提升代码运行效率,也能提高系统可靠性。设计模式可以分为三类,分别是创建型、结构型和行为型。以下就抽象工厂模式简要概述。

什么是抽象工厂
抽象工厂是创建工厂的工厂,接口创建一个对象工厂,工厂内部按照规则产生对应的对象,我们不用关心内部如何创建工厂,如何创建对象,只需调用使用即可。这种设计模式属于创建型模式,是创建对象的最佳实现。

小试牛刀
首先创建一个公司CompanyService接口,创建南充北京成都三个子公司实现类;然后创建一个抽象工厂AbstractFactory,内部提供抽象方法getCompany,用来获取公司。再创建一个公司工厂CompanyTestFactory继承抽象工厂AbstractFactory,然后创建一个工厂生产者FactoryProducer用来生产工厂。从而达到用工厂创建工厂的目的。
关系图如下:

1、创建公司接口并产生北京 成都 南充三个公司实现类

public interface CompanyService {

    
    void employUsers();

}
@Service
@Slf4j
public class BeijingCompanyServiceImpl implements CompanyService {

    @Override
    public void employUsers() {
        log.error("this is a beijing company employ");
    }
}
@Service
@Slf4j
public class ChengduCompanyServiceImpl implements CompanyService {
    @Override
    public void employUsers() {
        log.error("this is a chengdu company employ");
    }
}
@Service
@Slf4j
public class NanchongCompanyServiceImpl implements CompanyService {
    @Override
    public void employUsers() {
        log.error("this is a nanchong company employ");
    }
}

2、创建抽象工厂,也就是创建工厂的工厂;内部增加获取工厂的方法

public abstract class AbstractFactory {

    
    public abstract CompanyService getCompany(String companyName);

}

3、创建公司工厂并继承抽象工厂类,工厂类中增加获取公司对象的方法

public class CompanyByTestFactory extends AbstractFactory {
    
    public static final String BEIJING_COMPANY = "BEIJING_COMPANY";
    public static final String CHENGDU_COMPANY = "CHENGDU_COMPANY";
    public static final String NENCHONG_COMPANY = "NENCHONG_COMPANY";

    @Override
    public CompanyService getCompany(String companyName) {
        switch (companyName) {
            case BEIJING_COMPANY:
                return new BeijingCompanyServiceImpl();
            case CHENGDU_COMPANY:
                return new ChengduCompanyServiceImpl();
            default:
                return new NanchongCompanyServiceImpl();
        }
    }
}

4、创建抽象工厂生产者,用来创建抽象工厂

public class FactoryProducer {
    
    public static final String FACTORY_TYPE_BY_COMPANY = "FACTORY_TYPE_BY_COMPANY";

    
    public static AbstractFactory  getFactory(String type){
        switch (type){
            case FACTORY_TYPE_BY_COMPANY:
                return new CompanyByTestFactory();
            default:
                return null;
        }
    }
}

5、测试抽象个工厂模式

@Test
public void testAbstractFun(){
    //获取公司工厂
    AbstractFactory factory = FactoryProducer.getFactory(FactoryProducer.FACTORY_TYPE_BY_COMPANY);
    //获取公司对象
    CompanyService company = factory.getCompany(CompanyByTestFactory.BEIJING_COMPANY);
    //招聘员工
    company.employUsers();
}

测试结果:
2022-08-09 11:02:01.726 ERROR 61832 — [main]
p.i.t.s.impl.BeijingCompanyServiceImpl : this is a beijing company employ

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1039087.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号