抽象工厂模式解决的是系列产品的问题,即工厂生产的产品本身存在着抽象且有不同的实现,此场景适合使用抽象工厂。
Coding:
1、抽象产品A系列
//定义不同的产品之间的一定具备的标准,用interface实现 //其中的method()方法可看作提取出不同产品的共性,如手机都有类似的功能 public interface IProductA { public void method(); }
1.1、厂商1 A系列的产品
public class ProductA1 implements IProductA { public void method() { System.out.println("厂商1 生产**********"); } }
1.2、厂商2 A系列的产品
public class ProductA2 implements IProductA { public void method() { System.out.println("厂商2 生产**********"); } }
2、抽象产品B系列
//定义不同的产品之间的一定具备的标准,用interface实现 //其中的method()方法可看作提取出不同产品的共性,如手机都有类似的功能 public interface IProductB { public void method(); }
2.1、厂商1 B系列的产品
public class ProductB1 implements IProductB { @Override public void method() { System.out.println("厂商1 生产*******"); } }
2.2、厂商2 B系列的产品
public class ProductB2 implements IProductB { @Override public void method() { System.out.println("厂商2 生产*******"); } }
3、抽象工厂,生成A、B系列产品
//每一种牌子的产品生产工厂,即不同的厂商负责自己牌子产品的生产 public abstract class Factory { public abstract IProductA getProductA(); public abstract IProductB getProductB(); }
4、厂商1 生产的A、B系列的产品
//具体的工厂用来生产相关的产品 public class FactoryImpl1 extends Factory { @Override public IProductA getProductA() { return new ProductA1(); } @Override public IProductB getProductB() { return new ProductB1(); } }
5、厂商2 生产的A、B系列的产品
//具体的工厂用来生产相关的产品 public class FactoryImpl2 extends Factory { @Override public IProductA getProductA() { return new ProductA2(); } @Override public IProductB getProductB() { return new ProductB2(); } }
6、客户端调用工厂模式获取产品
public class Client { public static void main(String[] args) { Factory ff1 = new FactoryImpl1(); ff1.getProductA().method(); ff1.getProductB().method(); System.out.println("--------------------------------"); Factory ff2 = new FactoryImpl2(); ff2.getProductA().method(); ff2.getProductB().method(); } }
针对客户端来说只需要切换抽象工厂的实现即可控制程序产生不同的系列产品,抽象工厂存在的问题,一旦系列产品比较多,那么就会存在工厂泛滥的情况。
相关推荐
《C++20设计模式》学习笔记-第3章工厂方法和抽象工厂模式学习代码
共150讲,时长共 33...1) 内容包括: 设计模式七大原则(单一职责、接口隔离、依赖倒转、里氏替换、开闭原则、迪米特法则、合成复用)、UML类图(类的依赖、泛化和实现、类的关联、聚合和组合) 23种设计模式包括...
1. 创建型模式:创建型模式关注对象的创建过程,包括简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式和单例模式。这些模式可以帮助我们更灵活地创建对象,避免直接使用new关键字来创建对象,降低...
来自《Head Fist 设计模式》一书的实例,个人学习笔记用途
定义: 结构说明: 相关概念: 接口: 接口与抽象类的区别: 面向接口编程: 功能: 时序图: 优缺点: 代码阐释:
describe:设计模式学习笔记 逻辑结构图 代码结构图 设计模式简述 创建型模式,共五种:工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。 结构型模式,共七种:适配器模式,装饰器模式,代理模式,...
配套博客学习笔记: ://yubuntu0109.github.io/tags/design-and-pattern/ 参考书籍(推荐): 《Java设计模式 - 刘伟》 , 《图解设计模式 - [日]结城浩》 创建型模式 :check_mark:简单工厂模式( Simple Factor ...
设计模式学习笔记,此项目参考《大话设计模式》,只能作为入门级设计模式学习 设计原则 职责单一原则 开放-封闭原则 依赖倒转原则 高层模块不依赖底层模块,两个模块都应该依赖抽象。抽象不依赖细节,细节依赖抽象。...
酒店管理客房系统Java源码 创建型模式:关注对象的创建过程 :保证一个类只有一个实例,并且提供一个访问该实例的全局访问点 ...抽象工厂模式是工厂模式的一种升级版本。 :分离了对象子组件的单独构造(由Builder来负
第一部分:设计模式 & UML 简单工厂 工厂方法模式 抽象工厂模式 策略模式 责任链模式 命令模式 模板方法模式 适配器模式 代理模式 外观模式 组合模式 装饰模式 享元模式 桥接模式 Builder模式 状态模式 解释器模式 ...
VS2005 ASP.NET本地化学习笔记&感受 在自定义Server Control中捆绑JS文件 Step by Step 深度解析Asp.Net2.0中的Callback机制 使用 Web 标准生成 ASP.NET 2.0 Web 站点 ASP.NET 2.0基于SQLSERVER 2005的aspnetdb.mdf...
抽象工厂模式 状态模式 解释器模式 命令模式 备忘录模式 迭代器模式 模板方法模式 访问者模式 中介者模式 组合模式 装饰模式 享元模式 桥接模式 第二部分 第三部分 链表 字符串 树 图 查找 《剑指Offer》 《程序员...
学习笔记较长,如果想查看文章的目录,chrome浏览器可以配合简悦插件使用,或者下载到本地使用Typora打开。 :hot_beverage: Java基础 Java容器 Java并发 数据结构和算法 数据结构 树 图 算法 分治 动态规划 回溯 ...
抽象工厂模式 状态模式 解释器模式 命令模式 备忘录模式 迭代器模式 模板方法模式 访问者模式 中介者模式 组合模式 装饰模式 享元模式 桥接模式 第二部分 第三部分 链表 字符串 树 图 查找 《剑指Offer》 《程序员...
抽象工厂模式 状态模式 解释器模式 命令模式 备忘录模式 迭代器模式 模板方法模式 访问者模式 中介者模式 组合模式 装饰模式 享元模式 桥接模式 ##第二部分 ##第三部分 链表 字符串 树 图 查找 《剑指Offer》 ...
设计模式可不是几篇文章能够说明白的,这篇文章也是我的学习笔记吧。 构造器模式 最简单的设计模式,其实就是我们常见的: function User(name, age) { this.name = name; this.age = age } let a = new User('...
设计模式之UML 类图以及类间关系(泛化 、实现、依赖、关联、聚合、组合) 类图用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试...
抽象工厂模式 状态模式 解释器模式 命令模式 备忘录模式 迭代器模式 模板方法模式 访问者模式 中介者模式 组合模式 装饰模式 享元模式 桥接模式 第二部分 第三部分 链表 字符串 树 图 查找 《剑指Offer》 《程序员...