自己总结的-------工厂模式
1、下面的代码是可以运行的。
?
import java.io.*;
import java.util.*;
interface Fruit{
?public void grow();
?public void pick();
}
class Apple implements Fruit{
?public void grow() {
??System.out.println("苹果在生长。。。");
??
?}
?public void pick() {
??System.out.println("我在在摘苹果。。。");
??
?}
?
}
class Orange implements Fruit{
?public void grow() {
??System.out.println("桔子在生长。。。");
??
?}
?public void pick() {
??System.out.println("我们在摘桔子。。。");
??
?}
?
}
class Cherry implements Fruit{
???
?????? public void grow(){
?????????????? System.out.println("樱桃在生长。。。");
???? }
?????? public void pick(){
?????????????? System.out.println("我们在摘樱桃。。。");??
? }
}
class Factory{
?public static Fruit getFruitInstance(String type){
??
??Fruit f=null;
???????????????? try{
??f=(Fruit) Class.forName(type).newInstance();
??????????????? }catch(Exception e){
?????????????????????? System.out.println(e);
??????????????? }
??return f;
?}
}
// 定义一个新类,此类可以从键盘输入数据
class? Tio{
BufferedReader bf=null;
?? public Tio(){
?? bf=new BufferedReader(new InputStreamReader(System.in));
?? }
? public String getin(){
???????? String str=null;
???????????? try{
???????????????? str=bf.readLine();
???? }catch(Exception e){
????????? System.out.println(e);
????????? }
??????? return str;
?? }
}
//读文件的类
class Init{
????? public? static? Properties getInitStance()throws Exception{
??????????? Properties ps=new Properties();
??????????? ps.loadFromXML(new FileInputStream(new File("jack.xml")));//jack.xml是个绝对路径,可以任意写。
??????????? return ps;
??? }
}
public class TestFactory {
?public static void main(String[] args)throws Exception{
??????????????? Properties? ps=new? Properties();
???????? ps=Init.getInitStance();
??????????????? System.out.println(ps);
???????????????? // 加入一个可以从键盘输入数据的类
??????????????? System.out.println("输入你想要的代号:");
??????????????? String code=new Tio().getin();
???????????????
??Fruit fru=Factory.getFruitInstance(ps.getProperty(code));
????????????????? if(fru!=null){
??fru.grow();
??fru.pick();
???????????? }else {
????????????????? System.out.println("没有发现这个类!");
?????????? }
?}
}
2、下面是配置文件,配置文件的目的是,可以动态的修改(添加子类等等),上面的类可以直接读文件,就可以了。
?
import java.util.*;
import java.io.*;
public class DemoXML{
?????? public static void main(String[] args)throws Exception{
??????????????? Properties? ps=new? Properties();
?????????????? //下面是生成文件
??????????????? /*
???????? ps.setProperty("a","Apple");//这里的Apple是类,要是有包的话要写成:包名+类名。
??????????????? ps.setProperty("o","Orange");
??????????????? ps.setProperty("c","Cherry");
?????????????? // 下面的两个写法都可以生成jack.xml文件
?????????????? //? ps.storeToXML(new FileOutputStream("jack.xml"), "要生成的文件!") ;
??????????????? ps.storeToXML(new FileOutputStream(new File("jack.xml")), "要生成的文件!") ;
???????????????? */
???????????????? //下面是读文件。
???????????????? ps.loadFromXML(new FileInputStream(new File("jack.xml")));
????????? System.out.println(ps) ;
?? }
}
?
?