美文网首页设计模式Android技术知识Android知识
安卓设计模式(八)工厂方法模式

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

作者: uncochen | 来源:发表于2016-11-29 15:25 被阅读0次

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

    该系列其他文章:

    定义: 定义一个用于创建对象的接口(非指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 extends ICache> T create(Class<T> c);//创建缓存实例
    } 
    

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

    public class CacheFactory implements ICacheFactory {
        @Override
        public <T extends ICache> T create(Class<T> 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一个实例有很大优势.工厂方法模式将对象的创建过程封装在工厂中,使得客户端无需再关心实例的创建和初始化过程.

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

    关于作者

    相关文章

      网友评论

        本文标题:安卓设计模式(八)工厂方法模式

        本文链接:https://www.haomeiwen.com/subject/jpoapttx.html