class Singletone{
private static final Singletone s = new Singletone();
private Singletone(){}
public static Singletone getInstance(){
return s;
}
}
class Singletonl{
private static Singletonl s = null;
public Singletonl() {
}
public static Singletonl getInstance(){
if (null==s){
s = new Singletonl();
}
return s;
}
}
class Singleton{
private static volatile Singleton s = null;
public Singleton() {
}
public static Singleton getInstance(){
if (null==s){
synchronized (Singleton.class){
if (null==s){
s = new Singleton();
}
}
}
return s;
}
}
public class FactoryMethodTest {
public static void main(String[] args) {
Creator creator = new ConcreteCreator();
Product product1 = creator.createProduct(ConcreteProduct1.class);
product1.method1();
product1.method2();
Product product2 = creator.createProduct(ConcreteProduct2.class);
product2.method1();
product2.method2();
}
}
abstract class Product{
public void method1(){
System.out.println("产品类的公共方法");
}
public abstract void method2();
}
class ConcreteProduct1 extends Product{
@Override
public void method2() {
System.out.println("ConcreteProduct1的method2()");
}
}
class ConcreteProduct2 extends Product{
@Override
public void method2() {
System.out.println("ConcreteProduct2的method2()");
}
}
abstract class Creator{
public abstract <T extends Product> T createProduct(Class<T> c);
}
class ConcreteCreator extends Creator{
@Override
public <T extends Product> T createProduct(Class<T> c) {
Product product = null;
try {
product = c.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return (T) product;
}
}