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%

    复杂度:中

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

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

    逆鳞:无

    相关设计模式

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

  • 相关阅读:
    Eclipse中添加MyEclipse插件
    用GWT开发的HelloGWT程序
    GWT module 'xxx' may need to be (re)compiled解决办法
    GWTDesigner_v5.1.0破解码
    Firefox火狐广告过滤插件Adblock Plus过滤规则包[中文维护小组]
    工程师们,不要想一辈子靠技术混饭吃
    PHP生成类似类似优酷、腾讯视频等其他视频链的ID
    (外挂破解)Cheat Engine(内存修改工具)V6.2中文版软件介绍
    ucos-ii核心算法分析(转)
    Websocket,ProtoBuffer,Hightlight,JSON 等,最近遇到的一些知识点小结
  • 原文地址:https://www.cnblogs.com/learningchencheng/p/7717355.html
Copyright © 2011-2022 走看看