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

java23种设计模式(二) -- 抽象工厂模式(创建型设计模式)

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

java23种设计模式(二) -- 抽象工厂模式(创建型设计模式)

抽象工厂模式介绍

抽象工厂模式与工厂方法模式虽然主要意图都是为了解决,接口选择问题。但在实现上,抽象工厂是一个中心工厂,创建其他工厂的模式。

多个抽象产品类,派生出多个具体产品类;一个抽象工厂类,派生出多个具体工厂类;每个具体工厂类可创建多个具体产品类的实例。

即提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们的具体的类。“一对多”的关系。

类结构图:

代码示例

项目目录结构

public interface Fruit {

    void fruitInfo();
}


public class NorthFruit implements Fruit {
    @Override
    public void fruitInfo() {
        System.out.println("North-Apple");
    }
}


public class SouthFruit implements Fruit {
    @Override
    public void fruitInfo() {
        System.out.println("South-Banana");
    }
}
public interface Vegetable {

    void vegetableInfo();
}


public class NorthVegetable implements Vegetable {
    @Override
    public void vegetableInfo() {
        System.out.println("North-Tomato");
    }
}


public class SouthVegetable implements Vegetable {
    @Override
    public void vegetableInfo() {
        System.out.println("South-Taro");
    }
}
public interface Factory {

    Fruit createFruit();

    Vegetable createVegetable();
}


public class NorthProductFactory implements Factory {
    @Override
    public Fruit createFruit() {
        return new North    Fruit();
    }

    @Override
    public Vegetable createVegetable() {
        return new NorthVegetable();
    }
}


public class SouthProductFactory implements Factory {
    @Override
    public Fruit createFruit() {
        return new SouthFruit();
    }

    @Override
    public Vegetable createVegetable() {
        return new SouthVegetable();
    }
}

测试类

public class ApiTest {

    @Test
    public void testCommodity() throws Exception {
        Factory northFactory = new NorthProductFactory();
        Factory southFactory = new SouthProductFactory();

        System.out.println("北方产品:");
        northFactory.createFruit().fruitInfo();
        northFactory.createVegetable().vegetableInfo();

        System.out.println("南方产品:");
        southFactory.createFruit().fruitInfo();
        southFactory.createVegetable().vegetableInfo();
    }
}

总结
  • 抽象工厂模式,所要解决的问题就是在一个产品族,存在多个不同类型的产品情况下,接口选择的问题。而这种场景在业务开发中也是非常多见的,只不过可能有时候没有将它们抽象化出来。
  • 你的代码只是被ifelse埋上了!当你知道什么场景下何时可以被抽象工程优化代码,那么你的代码层级结构以及满足业务需求上,都可以得到很好的完成功能实现并提升扩展性和优雅度。
    那么这个设计模式满足了;单一职责、开闭原则、解耦等优点,但如果说随着业务的不断拓展,可能会造成类实现上的复杂度。但也可以说算不上缺点,因为可以随着其他设计方式的引入和代理类以及自动生成加载的方式降低此项缺点。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/331717.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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