zoukankan      html  css  js  c++  java
  • 抽象工厂模式(Abstract factory pattern)

    定义

    抽象工厂模式(英语:Abstract factory pattern)是一种软件开发设计模式。抽象工厂模式提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来。在正常使用中,客户端程序需要创建抽象工厂的具体实现,然后使用抽象工厂作为接口来创建这一主题的具体对象。客户端程序不需要知道(或关心)它从这些内部的工厂方法中获得对象的具体类型,因为客户端程序仅使用这些对象的通用接口。抽象工厂模式将一组对象的实现细节与他们的一般使用分离开来。

    类图

    从类图上我们看出相对工厂方法这里多了抽象产品族,而工厂多了创建多出产品族的方法,下面看看java代码实现

    java代码实现

    抽象产品

    public interface ProductA {
        void run();
    }
    
    public interface ProductB {
        void run();
    }
    

    具体产品

    public class ProductA1 implements ProductA {
        @Override
        public void run() {
            System.out.println("beaz1 run");
        }
    }
    
    public class ProductB1 implements ProductB {
        @Override
        public void run() {
            System.out.println("bmw1 run");
        }
    }
    

    抽象工厂

    public interface Creator {
        ProductA creatorProductA();
    
        ProductB creatorProductB();
    }
    

    具体工厂

    public class Creator1 implements Creator {
        @Override
        public ProductA creatorProductA() {
            return new ProductA1();
        }
    
        @Override
        public ProductB creatorProductB() {
            return new ProductB1();
        }
    }
    

    实例

    看了上面这些类,大家是不有点想起了我们常用的List,就是这种结构。来看看List源码

    public interface List<E> extends Collection<E> {
    
        Iterator<E> iterator();
    
        ListIterator<E> listIterator();
    }
    

    这两个方法是不是正好是抽象工厂构建不同产品的方法呢,然而ArrayList,LinkedList正是具体的工厂,在他们内部有这两个抽象产品IteratorListIterator的具体实现。

    总结

    设计原则:遵循单一职责、依赖倒置、开闭原则

    常用场景:需要一个接口可以提供一个产品族,且不必知道产品的具体种类

    使用概率:30%

    复杂度:中

    变化点:工厂与产品的种类

    选择关键点:产品族是否需要一起提供,且是否有一致的接口

    逆鳞:无

    相关设计模式

    建造者模式:两者都是建造一批对象或者说产品,不同的是两者的目的和实现手段,在建造者模式中,是为了复用对象的构建过程而定义了一个指挥者,而在抽象工厂模式中,是为了提供一个这批对象的创建接口而定义了抽象工厂接口。

  • 相关阅读:
    Palindrome Partitioning
    Minimum Path Sum
    Maximum Depth of Binary Tree
    Minimum Depth of Binary Tree
    Unique Binary Search Trees II
    Unique Binary Search Trees
    Merge Intervals
    Merge Sorted Array
    Unique Paths II
    C++ Primer Plus 笔记第九章
  • 原文地址:https://www.cnblogs.com/learningchencheng/p/7717355.html
Copyright © 2011-2022 走看看