美文网首页设计模式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一个实例有很大优势.工厂方法模式将对象的创建过程封装在工厂中,使得客户端无需再关心实例的创建和初始化过程.

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

关于作者

相关文章

  • 安卓设计模式-简单工厂模式

    安卓设计模式-简单工厂模式 是什么 简单工厂模式又称为静态方法模式(因为工厂类中定义了一个静态方法),简单工厂模式...

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

    工厂方法模式是创建性设计模式之一,一般用于复杂对象的创建 该系列其他文章: 安卓设计模式(一)面向对象六大设计原则...

  • 工厂模式

    安卓常用的设计模式 工厂模式(Factory Pattern)是 Android中最常用的设计模式之一。这种类型的...

  • 2021-11-16 - 学习记录

    设计模式学习:创建型:工厂(工厂方法,抽象工厂),建造者,单例,原型 设计模式:工厂模式 简单工厂 工厂方法 抽象工厂

  • 设计模式(2)-工厂方法模式详解(易懂)

    欢迎大家关注我的微信公众号:安卓干货铺 工厂方法模式的定义 工厂方法模式(FACTORY METHOD)是一种常用...

  • 工厂模式

    工厂模式 就是工厂---生产-->产品 在设计模式中,分为 简单工厂模式, 工厂方法模式,抽象工厂模式. 工厂模式...

  • PHP-浅谈单例模式和工厂模式

    PHP中常用的设计模式有单例模式、工厂模式(简单工厂模式、工厂方法模式和抽象工厂方法模式)、适配模式、策略模式。 ...

  • 设计模式-工厂模式

    设计模式1 设计模式2 工厂模式 工厂模式可简单的分为三类:简单工厂,工厂方法,抽象工厂 简单工厂模式 定义 简单...

  • 设计模式之工厂方法模式(创建型)

    一、模式定义 工厂方法模式:又称工厂模式,也叫虚拟构造器模式,属于构建型设计模式,工厂方法模式是在简单工厂模式上进...

  • spring 设计模式篇(前)

    设计模式俗称:套路 一、spring常见设计模式 (23种设计模式) 创建型:工厂方法模式、抽象工厂模式、建造者...

网友评论

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

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