• 设计模式-抽象工厂模式


    一、定义

    抽象工厂模式(Abstract Factory Pattern)是一种比较常见的模式,其定义如下:

    Provide an interface for creating families of related or dependent objects without specifying their concrete classes.(为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。)

    抽象工厂模式的通用类图为:

    抽象工厂模式的通用类图

    //抽象产品类
    public abstract class AbstractProductA {
        public void shareMethod() {
            //每个产品共有的方法
        }
        
        //每个产品相同方法,不同实现
        public abstract void doSomething();
    }
    
    //产品A1的实现类
    public class ProductA1 extends AbstractProductA {
        public void doSomething() {
            System.out.println("产品A1的实现方法");
        }
    }
    
    //产品A2的实现类
    public class ProductA2 extends AbstractProductA {
        public void doSomething() {
            System.out.println("产品A2的实现方法");
        }
    }
    
    //抽象工厂类
    public abstract class AbstractCreator {
        public abstract AbstractProductA createProductA();
        
        public abstract AbstractProductB createProductB();
    }
    
    //产品等级1的实现类
    public class Creator1 extends AbstractCreator {
        public AbstractProductA createProductA {
            return new ProductA1();
        }
        
        public AbstractProductB createProductB() {
            return new ProductB1();
        }
    }
    
    //产品等级2的实现类
    public class Creator2 extends AbstractCreator{
        public AbstractProductA createProductA() {
            return new ProductA2();
        }
        
        public AbstractProductB createProductB() {
            return new ProductB2();
        }
    }
    

    注意:有M个产品就应该有M个实现工厂类,在每个实现工厂中,实现不同产品族的生成任务。

    public class Client {
       public static void main(String[] args) {
           AbstractCreator creator1 = new Creator1();
           AbstractCreator creator2 = new Creator2();
           
           AbstractProductA a1 = creator1.createProductA();
           AbstractProductA a2 = creator2.createProductA();
           AbstractProductB b1 = creator1.createProductB();
           AbstractProductB b2 = creator2.createProductB();
       }
    }
    

    二、应用

    2.1 优点

    • 封装性,每个产品的实现类不是高层模块要关心的,他要关心的是接口,是抽象,他不关心对象是如何创建出来。这是由工厂类负责的,只要知道工厂类是谁,我就能创建出一个需要需要的对象。
    • 产品族内的约束为非公开状态。

    2.2 缺点

    最大缺点就是产品族扩展非常困难。如果我们要增加一个产品,抽象类AbstractCreator要增加一个方法,然后两个实现类都要修改,这违背了开闭原则。

    2.3 使用场景

    一个对象族(或是一组没有任何关系的对象)都有相同的约束,就可以使用抽象工厂模式。例如一个文本编辑器和一个图片处理器,都是软件实体。但是*nixd下的文本编辑器和windows下的文本编辑器虽然功能和界面都相同,但是代码实现不同,图片处理器也有类似情况。也就是具备了相同的约束条件:操作系统类型。于是我们可以使用抽象工厂模式,产生不同操作系统下的编辑器和图片处理器。

  • 相关阅读:
    X、Y轴抖动的动画
    ViewFlipper的简单用法
    让手机连接到指定的WIFI网络,适用于之前已经连过的网络
    Eclipse 离线汉化的方法
    自己写的SeekBarPreference,可以实现seekbar滑动监听和设置默认进度和最大进度
    录制Android屏幕软件——屏幕录像专家
    【转】解决Android因加载多个大图引起的OutOfMemoryError,内存溢出的问题
    Java中的线程实现
    获得手机当前的ip地址
    操作Wifi的工具类
  • 原文地址:https://www.cnblogs.com/f-zhao/p/6196819.html
Copyright © 2020-2023  润新知