先来个简单工厂模式:
package cn.itcast.factory;
import java.util.Scanner;
public class EasyFactoryDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String style = sc.next();
Style s = null;
s = EasyFactory.getInstance(style);
s.show();
}
}
interface Style{
public abstract void show();
}
class WinXP implements Style{
@Override
public void show() {
System.out.println("XP风格主题");
}
}
class Win7 implements Style{
@Override
public void show() {
System.out.println("Win7风格主题");
}
}
//为了不修改主程序,增加一个可以根据参数制造所有对象的Factory
class EasyFactory{
public static Style getInstance(String className){
Style s = null;
if("xp".equals(className)) s = new WinXP();
if("win7".equals(className)) s = new Win7();
return s;
}
}
/**
* 这个只是最简单的工厂模式,工厂模式还可以结合反射和Properties或者xml使用,通过配置文件new不同的对象
* 总之,最基础的东西要学好。
* 缺点在于每增加一个子类都要修改主程序
*/
工厂模式:
package cn.itcast.factory;
import java.util.Scanner;
public class FactoryDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String style = sc.next();
Style s = null;
s = EasyFactory.getInstance(style);
s.show();
}
}
class Factory{
public static Style getInstance(String className) throws Exception{
Style style = null;
style = (Style)Class.forName(className).newInstance();
return style;
}
}
//增加子类,无需再修改主程序