标签:
工厂方法模式定义:定义一个用于创建对象的接口,由子类决定实例化哪一个类。
举个栗子:我们项目中可能经历变更缓存数据库的情况,比如从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