public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//使用时生成实例,提高了效率!
if (instance==null)
instanceQnew Singleton();
return instance; }
}
使用Singleton.getInstance()可以讉K单态类?o:p>
public interface Builder {
//创徏部gA
void buildPartA();
//创徏部gB
void buildPartB();
//q回最后组装成品结?br /> //成品的组装过E不在这里进?而是转移C面的DirectorcMq行.
//从而实C解?strong>q程?strong>部g
Product getResult();
}
public class Director {
private Builder builder;
public Director( Builder builder ) {
this.builder = builder;
}
// 部件partA partB最后组成复杂对?br /> public void construct() {
builder.buildPartA();
builder.buildPartB();
}
}
public class ConcreteBuilder implements Builder {
Part partA, partB;
public void buildPartA() {
//q里是具体如何构建partA的代?br />
};
public void buildPartB() {
//q里是具体如何构建partB的代?br /> };
public Product getResult() {
//q回最后组装成品结?br /> };
}
我们看看如何调用Builder模式:
ConcreteBuilder builder = new ConcreteBuilder();
Director director = new Director( builder );
director.construct();
Product product = builder.getResult();
public abstract class AbstractPrototype implements Cloneable
{
String name;
public void setName(String Name) {this.name = name;}
public String getName() {return this.name;}
public Object clone()
{
Object object = null;
try {
object = super.clone();
} catch (CloneNotSupportedException exception) {
System.err.println("AbstractPrototype is not Cloneable");
}
return object;
}
}
public class SoupPrototype extends AbstractPrototype
{
public SoupPrototype()
{
setName("Soup Prototype");
}
}
public class SaladPrototype extends AbstractPrototype
{
public SaladPrototype()
{
setName("Salad Prototype");
}
}
public class WorkFactory {
public static Work getWork(String color){
return color.equals("black")?new BlackWork():new WhiteWork();
}
}
抽象工厂
定义Q如果工厂是生实例的,那抽象工厂就是一个整个工厂的架构没有具体的实?br /> Z使用Q比如h家想用你的工厂,但是你又不想让h家看C工厂里面具体的工作,q且你还要告诉他你工厂可能干什么。这时候你可以给他看你的抽象的工?br /> 而不是真正再生的工厂了。而且利于扩展Q比如又让你Z个工厂和上一个在实现上有区别但是q是那几个方法。这样你利用抽象工厂很快可以搭?br /> q另一个工厂了?br /> 实例Q?nbsp;
public abstract class AbstractFactory {
public abstract Work getWork() throws Exception;
public abstract Study getStudy() throws Exception;
}