//单例模式***********************************************
package day15;
public class TestSingleton {
public static void main(String[] args){
MyClass m = MyClass.newInstance();
MyClass2 m2 = MyClass2.newInstance();
}
}
//单例模式,写法1----饿汉式
class MyClass{
private static final MyClass instance = new MyClass();
public static MyClass newInstance(){
return instance;
}
private MyClass(){}
}
//单例模式,写法2----懒汉式
//需要加synchronized,否则在多线程时可能会创建出多个对象
class MyClass2{
private static MyClass2 instance = null;
public static synchronized MyClass2 newInstance(){
if(instance == null) instance = new MyClass2();
return instance;
}
private MyClass2(){}
}
*********************************************************************************
//工厂模式 事先写好一个配置文件config.txt 内容写上要创建的类,包括包名,如day15.Dog或者day15.Cat
package day15;
import java.io.*;
public class TestFactory {
public static void main(String[] args){
Animal a = Factory.createAnimal();
System.out.println(a.getClass().getName());
}
}
class Animal{}
class Dog extends Animal{}
class Cat extends Animal{}
class Factory{
public static Animal createAnimal(){
try {
FileReader fr = new FileReader("config.txt");
BufferedReader br = new BufferedReader(fr);
String className = br.readLine();
br.close();
Class<?> c = Class.forName(className);
Object o = c.newInstance();
return (Animal)o;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
***********************************************************************