创建者模式--抽象工厂
抽象工厂 构建者 工厂方法 原型 单例
抽象工厂
定义:提供工厂方法之上级别的接口,主要用于返回一个或者多个工厂。
优点及使用:
创建相关的或者无关的对象组提供产品化的类库,只暴露接口实现类需要独立于超类系统独立于它的产品创建,显示试着强制某种约束一种隐藏平台特点的选择系统的易扩展相关联的模式有: 工厂方法: 这常常是一个抽象的工厂实现
单例: 这常常是一个抽象的工厂实现
原型: 这常常是一个抽象的工厂实现
外观: 这经常被用于抽象工厂,提供创建实现类的接口
例子:
假设你需要写一段程序来显示不同地方的数据,比方说来自远程的或者本地的,你需要在取数据之前进行数据库连接,这样,你就有两种选择,本地或者远程,你可以选择使用抽象工程模式来设计接口。
class DataInfo{}interface Local { DataInfo[] loadDB(String fileName);}interface Remote extends Local{ void connect2WWW(String url);}class LocalMode implements Local{ public DateInfo[] loadDB(String name) { System.out.print("Load from a local dataBase"); return null; }}class RemoteMode implements Remote { public void connect2WWW(String url) { System.out.println("Connect to a remote site "); } public DataInfo[] loadDB(String name) { System.out.println("Load from a remote database "); return null; }}// 抽象工厂interface ConnectionFactory { Local getLocalConnection(); Remote getRemoteConnection();}//抽象工厂实现class DataManager implements ConnectionFactory { boolean local = false; DataInfo[] data; //... public Local getLocalConnection() { return new LocalMode(); } public Remote getRemoteConnection() { return new RemoteMode(); } public void loadData() { if(local){ Local conn = getLocalConnection(); data = conn.loadDB("db.db"); }else { Remote conn = getRemoteConnection(); conn.connect2WWW("www.some.where.com"); data = conn.loadDB("db.db"); } } // work on data public void setConnection(boolean b) { local = b; }}//测试方法class Test { public static void main(String[] args) { DataManager dm = new DataManager(); DataInfo[] di = null; String dbFileName = "db.db"; if (args.length == 1) { //将设local的为true dm.setConnection(true); LocalMode lm = (LocalMode)dm.getLocalConnection(); di = lm.loadDB(dbFileName); } else { //注意: dm.local = false 是默认设置 RemoteMode rm = (RemoteMode)dm.getRemoteConnection(); rm.connect2WWW("www.javacamp.org/db/"); di = rm.loadDB(dbFileName); } //使用一组方法来处理数据加载问题 //从这个层面来说你不需要担心数据的距离连接. //例如di.find(), di.search() etc. }}1 楼 mercyblitz 2010-08-18 一句话,抽象工厂就是工厂的工厂。 2 楼 ideal46 2010-08-19 mercyblitz 写道一句话,抽象工厂就是工厂的工厂。