码迷,mamicode.com
首页 > 其他好文 > 详细

工厂方法模式

时间:2016-06-30 06:27:53      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:

工厂方法模式定义:定义一个用于创建对象的接口,由子类决定实例化哪一个类。

举个栗子:我们项目中可能经历变更缓存数据库的情况,比如从memcached切换到redis.

代码清单-1 DBCache

public abstract class DBCache {
    /**
     * 添加用户的方法
     * @param user
     */
    public abstract void insertUser(User user);

    /**
     * 查找用户信息的方法
     * @param key
     * @return
     */
    public abstract User findUserByKey(String key);
}

代码清单-2  MemcachedDBCache

public class MemcachedDBCache extends DBCache{
    @Override
    public void insertUser(User user) {
        System.out.println("使用Memcached保存一个新数据!");
    }

    @Override
    public User findUserByKey(String key) {
        System.out.println("使用Memcached查找一个数据!");
        return null;
    }
}

代码清单-3 RedisDBCache

public class RedisDBCache extends DBCache {
    @Override
    public void insertUser(User user) {
        System.out.println("使用redis保存一个新数据!");
    }

    @Override
    public User findUserByKey(String key) {
        System.out.println("使用redis查找一个数据!");
        return null;
    }
}

代码清单-4 DBCacheFactory

public interface DBCacheFactory {
    /* 创建缓存数据库 */
    DBCache createDBCache();
}

代码清单-5 MemcachedDBCacheFactory

public class MemcachedDBCacheFactory implements DBCacheFactory{

    public DBCache createDBCache() {
        return new MemcachedDBCache();
    }
}

创建memcached的工厂类

代码清单-6 RedisDBCacheFactory 

public  class RedisDBCacheFactory implements DBCacheFactory{

    public DBCache createDBCache() {
        return new RedisDBCache();
    }
}

创建redis的工厂类

代码清单-7 场景类

public class Client {
    public static void main(String[] args){
        //调用memcached工厂类生成memcacheDBcahce
        DBCacheFactory memcacheFactory = new MemcachedDBCacheFactory();
        //将调用memcached的insert方法
        createDBCacheAndInsert(memcacheFactory);
        //切换到redis工厂类
        DBCacheFactory redisFactory = new RedisDBCacheFactory();
        //将调用redis的insert方法
        createDBCacheAndInsert(redisFactory);

    }

    public static void createDBCacheAndInsert(DBCacheFactory dbCacheFactory){
        DBCache dbCache = dbCacheFactory.createDBCache();
        dbCache.insertUser(new User());
    }
}

 

工厂方法模式

标签:

原文地址:http://www.cnblogs.com/taoyong/p/5628622.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!