设计模式之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;
}

你可能感兴趣的:(设计模式,C++,c,工作,C#)