安卓设计模式(八)工厂方法模式

工厂方法模式是创建性设计模式之一,一般用于复杂对象的创建

该系列其他文章:

  • 安卓设计模式(一)面向对象六大设计原则
  • 安卓设计模式(二)单例模式
  • 安卓设计模式(三)Builder模式
  • 安卓设计模式(四)装饰者模式
  • 安卓设计模式(五)代理模式
  • 安卓设计模式(六)策略模式
  • 安卓设计模式(七)模板方法模式
  • 安卓设计模式(八)工厂方法模式

定义: 定义一个用于创建对象的接口(非指interface),让子类决定实例化哪个类

使用场景: 创建复杂对象,且有多种功能相同的对象

实现举例

下面以Androd经常用到的缓存Cache来举例说明:

缓存接口,定义所有缓存必须实现的方法

public interface ICache {
    String get(String key);

    void put(String key, String value);

    void removeCache(String key);

    void clearCache();
}

工厂方法根据需求又用几种不同的实现,不过思想是一致的,下面分别说明

1. 简单工厂(静态工厂)

如果我们程序中整体只需要一种缓存即可,不需要多种缓存,如磁盘缓存,所以只需要单一缓存子类及单一工厂即可:

    /**
     * 磁盘缓存,具体方法实现省略
     */
    public class DiskCache implements ICache {
    
    
        @Override
        public String get(String key) {
            return null;
        }
    
        @Override
        public void put(String key, String value) {
    
        }
    
        @Override
        public void removeCache(String key) {
    
        }
    
        @Override
        public void clearCache() {
    
        }
    }

    /**
     * 简单工厂,只创建一种缓存
     */
    public class StaticCacheFactory {
        
        public static ICache create() {//注意这里直接使用static方法
            return new DiskCache();
        }
    } 
    
    //使用
    ICache iCache = StaticCacheFactory.create();
    iCache.get("");

2. 工厂与产品一对一,即每个工厂负责生产一种产品

    /**
     * 工厂接口,定义所有工厂的必须实现的方法
     */
    public interface ICacheFactory {
        
        ICache create();//创建缓存
    }

    /**
     * 磁盘缓存工厂,用于生产磁盘缓存实例
     */
    public class DiskFactory implements ICacheFactory {
        @Override
        public ICache create() {
            return new DiskCache();
        }
    }

    /**
     * 内存缓存工厂,用于生产内存缓存实例
     */
    public class MemoryFactory implements ICacheFactory {
        @Override
        public ICache create() {
            return new MemoryCache();
        }
    }

    //使用:
    ICacheFactory factory = new DiskFactory();
    //如果需要内存缓存
    //ICacheFactory factory = new MemoryFactory();
    ICache iCache = factory.create();
    iCache.clearCache();

3. 工厂与产品一对多,即每个工厂可以生产多种产品

工厂接口,定义所有工厂的必须实现的方法:

public interface ICacheFactory {

     T create(Class c);//创建缓存实例
} 

具体工厂,可根据需求生产不同的产品:

public class CacheFactory implements ICacheFactory {
    @Override
    public  T create(Class c) {
        T cache = null;
        try {
            cache = (T) Class.forName(c.getName()).newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return cache;
    }
}

使用:

ICacheFactory cacheFactory = new CacheFactory();
ICache diskCache = cacheFactory.create(DiskCache.class);//根据类型创建不同的缓存实例
ICache memoryCache = cacheFactory.create(MemoryCache.class);//根据类型创建不同的缓存实例

diskCache.clearCache();    
memoryCache.clearCache();    

总结

由以上可以的举例可以看到使用工厂方法创建对象简单明了,如果上面的缓存对象创建时需要设置很多参数,初始化数据等等,那么使用工厂方法模式相对于直接new一个实例有很大优势.工厂方法模式将对象的创建过程封装在工厂中,使得客户端无需再关心实例的创建和初始化过程.

实际开发中第三种使用的比较多,根据需求创建不同实例.

关于作者

你可能感兴趣的:(安卓设计模式(八)工厂方法模式)