设计模式之factory
(封装)Encapsulation Delegation(分派)Factory 将创建实例的工作分离
1.FactoryMethod
2. AbstractFactory
public abstract class Factory{
public abstract Sample creator();
public abstract Sample2 creator(String name);
}
public class SimpleFactory extends Factory{
public Sample creator(){
return new SampleA
}
public Sample2 creator(String name){
return new Sample2A
}
}
public class BombFactory extends Factory{
public Sample creator(){
return new SampleB
}
public Sample2 creator(String name){
return new Sample2B
}
}
public abstract class ForumFactory {
private static Object initLock = new Object();
private static String className = "com.jivesoftware.forum.database.DbForumFactory";
private static ForumFactory factory = null;
public static ForumFactory getInstance(Authorization authorization) {
if (authorization == null) {
return null;
}
//以下使用了Singleton 单态模式
if (factory == null) {
synchronized (initLock) {
if (factory == null) {
try {
Class c = Class.forName(className);
factory = (ForumFactory) c.newInstance();
} catch (Exception e) {
return null;
}
}
}
}
//Now, 返回 proxy.用来限制授权对forum的访问
return new ForumFactoryProxy(authorization, factory, factory.getPermissions(authorization));
}
//真正创建forum的方法由继承forumfactory的子类去完成.
public abstract Forum createForum(String name, String description) throws UnauthorizedException, ForumAlreadyExistsException;
}
页:
[1]