ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

【编码魔法师系列_构建型1.3 】抽象工厂模式(Abstract Factory)

【编码魔法师系列_构建型1.3 】抽象工厂模式(Abstract Factory)

在这里插入图片描述

学会设计模式,你就可以像拥有魔法一样,在开发过程中解决一些复杂的问题。设计模式是由经验丰富的开发者们(GoF)凝聚出来的最佳实践,可以提高代码的可读性、可维护性和可重用性,从而让我们的开发效率更高。通过不断的练习和实践,掌握其中的奥妙,选择合适的设计模式,能为我们的项目增加一丝神奇的魔力。

文章目录

  • 实例:
  • 目的:
  • 适用场景:
  • 优点:
  • 弊端:
  • 类图:
  • 框架用到的地方:
  • Coding:
  • 测试:
  • 测试结果:

实例:

通过不同的造车工厂,生产不同配置的不同车型

目的:

小轿车会根据普通零件区分不同车型,但SUV现阶段还只有一款车型,此时如果我们还使用“工厂方法模式”想更换工厂就有可能会对后面的逻辑代码造成影响,所以我们需要再将“工厂”抽象出来。让具体工厂实现工厂接口,这样即使更换其他实现了超级工厂的其他造车工厂,也不会对后面的代码逻辑造成影响「围绕一个“超级工厂”创建“其他工厂”」

适用场景:

A产品需要创建一系列的产品,B产品也需要创建一系列的产品,且它们创建的系列产品都是相同的,只是在实现上不同。那么对于创建这种“产品系列”(产品家族)的情况,我们就可以使用抽象工厂模式。

优点:

满足开闭原则、依赖倒置原则

弊端:

如果新增抽象工厂方法,需要修改的地方很多,所以抽象工厂模式不适用于新增纵向拓展的功能

类图:

在这里插入图片描述

框架用到的地方:

日志记录、数据库访问等

Coding:

IFactory:

public interface IFactory {Car creatCar(Integer flg);
}

Car接口:

public interface Car {void creat();
}

SmallCar:

public abstract class SmallCar implements Car {abstract String engine();abstract String wheel();
}

国产车:

public class GCSmallCar extends SmallCar {@Overridepublic void creat() {System.out.println("造一台" + this.engine() + "+" + this.wheel() + "的国产车");}@OverrideString engine() {return "国产发动机";}@OverrideString wheel() {return "国产轮胎";}
}

合资车:

public class HZSmallCar extends SmallCar{@Overridepublic void creat() {System.out.println("造一台" + this.engine() + "+" + this.wheel() + "的合资车");}@OverrideString engine() {return "合资发动机";}@OverrideString wheel() {return "合资轮胎";}
}

SUV:

public class SUV implements Car{@Overridepublic void creat() {System.out.println("造一台SUV");}
}

SmallCarFactory:

public class SmallCarFactory implements IFactory{@Overridepublic Car creatCar(Integer flg) {switch (flg){case 1:return new GCSmallCar();case 2:return new HZSmallCar();default:return new GCSmallCar();}}
}

SUVCarFactory:

public class SUVFactory implements IFactory{@Overridepublic Car creatCar(Integer flg) {return new SUV();}
}

测试:

public class Test {public static void main(String[] args) {IFactory iFactory = new SmallCarFactory();Car car = iFactory.creatCar(2);car.creat();}
}

测试结果:

造一台合资发动机+合资轮胎的合资车
文章后期会持续优化,如果觉得小名的文章帮助到了您,请关注小名,支持一下小名😄,给小名的文章点赞👍、评论✍、收藏🤞谢谢大家啦~♥♥♥
编码魔法师系列文章,会收录在小名的【设计模式】专栏中,希望大家可以持续关注🎉
返回列表