zoukankan      html  css  js  c++  java
  • 抽象工厂模式笔记

    定义

    之前已经写过工厂方法模式,其可以将创建对象的代码集中在一个对象或方法中,当增加产品时,只需要增加对应的产品和工厂类即可。但是其有一个问题是工厂的接口里只有一个创建抽象产品的方法,当我们想要在一个工厂里创建一系列的产品时,就需要使用抽象工厂模式。

    使用

    图看起来可能有点容易乱,其实主要有三个接口,两个产品的接口,每个产品接口有多个实现类

    同时有一个工厂类,工厂类中可以生成每种产品接口的一个实现类。

    代码(Java)

    产品组部分的代码如下:

    // A产品接口
    public interface ProductA {
        void method();
    }
    ​
    // A产品实现类A1
    public class ProductA1 implements ProductA {
        @Override
        public void method() {
            System.out.println("This is ProductA1");
        }
    }
    ​
    // A产品实现类A2
    public class ProductA2 implements ProductA {
        @Override
        public void method() {
            System.out.println("This is ProductA2");
        }
    }
    ​
    // B产品接口
    public interface ProductB {
        void method();
    }
    ​
    // B产品实现类B1
    public class ProductB1 implements ProductB {
        @Override
        public void method() {
            System.out.println("This is productB1");
        }
    }
    ​
    // B产品实现类B2
    public class ProductB2 implements ProductB {
        @Override
        public void method() {
            System.out.println("This is productB2");
        }
    }

    工厂相关代码:

    // 抽象工厂接口
    public interface Factory {
        // 生成A类产品
        ProductA createProductA();
        // 生成B类产品
        ProductB createProductB();
    }
    ​
    // 抽象工厂实现类1,生产ProductA1和ProductB1
    public class ConcreteFactory1 implements Factory {
        @Override
        public ProductA createProductA() {
            return new ProductA1();
        }
    ​
        @Override
        public ProductB createProductB() {
            return new ProductB1();
        }
    }
    ​
    // 抽象工厂实现类2,生产ProductA2和ProductB2
    public class ConcreteFactory2 implements Factory {
        @Override
        public ProductA createProductA() {
            return new ProductA2();
        }
    ​
        @Override
        public ProductB createProductB() {
            return new ProductB2();
        }
    }

    测试类如下:

    public class Test {
        public static void main(String[] args) {
            Factory factory = new ConcreteFactory1(); // 使用具体工厂1
            ProductA productA = factory.createProductA();
            ProductB productB = factory.createProductB();
            productA.method(); // 输出:This is ProductA1
            productB.method(); // 输出:This is productB1
    ​
            factory = new ConcreteFactory2(); // 切换工厂,使用具体工厂2
            productA = factory.createProductA();
            productB = factory.createProductB();
            productA.method(); // 输出:This is ProductA2
            productB.method(); // 输出:This is productB2
        }
    }

    总结

    抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

    有一个工厂抽象类或接口,多种产品抽象类或接口,每个具体工厂子类可以创建多种产品类。

  • 相关阅读:
    Hystrix熔断原理
    FeignClient Hystrix超时重试降级
    Windows上Docker Toolbox修改镜像源
    Windows10家庭版安装docker
    Class类文件结构--访问标志
    MySQL常见的七种锁详细介绍()
    maven setting.xml 阿里云镜像 没有一句废话
    mysql 批量操作,已存在则修改,不存在则insert,同时判断空选择性写入字段
    hdu5730
    3月部分题目简要题解
  • 原文地址:https://www.cnblogs.com/zawier/p/6900322.html
Copyright © 2011-2022 走看看