tory320

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            10 隨筆 :: 0 文章 :: 1 評(píng)論 :: 0 Trackbacks

          2007年1月30日 #

          Design Principle
          Identify the aspects of your application that vary and separate them from what stays the same.
          Here's another way to think about this principle: take the parts that vary and encapsulate them, so that later you can alter or extends the parts that vary without affecting those that don't.
          As simple as this concept is, it forms the basis for almost every design pattern. All patterns provide a way to let some part of a system vary independently of all other parts.

          Each set of class will hold all the implementations of their respective behavior. For instance, we might have one clss that implements quarking, another implements squaking, and another that implements silence.

          To separate thest behaviors from the Duck class, we'll pull both methods out of the duck class and create a new set of class to represent each behavior.

          This is in contrast to the way we were doing things before, where a behavior either came from a concrete implementation in the suprerclass Duck, or by providing a specialized implementation in the sub class itself. In both cases we were relying on an implementation. We were locked into using that specific implemetation and there was no room for changing out the behavior.

          And the same is true for the duck's flying behavior.

          Okay, now that we've done the deep dive on the duck simulator design, it's time to come back up for air and take a look at the big picture.

          Below is the entire reworked class structure. We have everything you'd expect: ducks extending Duck. fly behavior implementing FlyBehavior and quack behavior implementing QuackBehavior.

          Notice also that we've started to describe things a little differntly. Instead of thinking of the duck behaviors as a set of behaviors, we'll start thinking of them ad a family of algorithms. Think about it: in the SimUDuck design, the algorithms represent things a duck would do , but we could just as easily use the same techniques for a set of classes that implement the ways to compute state sales tax by different states.

          posted @ 2008-03-07 17:58 tory 閱讀(142) | 評(píng)論 (0)編輯 收藏

          /**
          ?* //FileOperate.java
          ?* 文件的各種操作
          ?* 楊彩 http://blog.sina.com.cn/m/yangcai
          ?* 文件操作 1.0
          ?*/
          ?
          //package common;
          ?
          import java.io.*;
          ?
          public class FileOperate
          {
          ?static boolean exitnow=false;
          ?static String aa,bb;
          ? public FileOperate() {
          ? }
          ?
          ? /**
          ?? * 新建目錄
          ?? */
          ? public void newFolder(String folderPath) {
          ??? try
          ??? {
          ????? String filePath = folderPath;
          ????? filePath = filePath.toString();
          ????? File myFilePath = new File(filePath);
          ????? if(!myFilePath.exists())
          ????? {
          ??????? myFilePath.mkdir();
          ????? }
          ????? System.out.println("新建目錄操作 成功執(zhí)行");
          ??? }
          ??? catch(Exception e)
          ??? {
          ????? System.out.println("新建目錄操作出錯(cuò)");
          ????? e.printStackTrace();
          ??? }
          ? }
          ?
          ? /**
          ?? * 新建文件
          ?? */
          ? public void newFile(String filePathAndName, String fileContent)
          ? {
          ?
          ??? try
          ??? {
          ????? String filePath = filePathAndName;
          ????? filePath = filePath.toString();
          ????? File myFilePath = new File(filePath);
          ????? if (!myFilePath.exists())
          ????? {
          ??????? myFilePath.createNewFile();
          ????? }
          ????? FileWriter resultFile = new FileWriter(myFilePath);
          ????? PrintWriter myFile = new PrintWriter(resultFile);
          ????? String strContent = fileContent;
          ????? myFile.println(strContent);
          ????? resultFile.close();
          ????? System.out.println("新建文件操作 成功執(zhí)行");
          ??? }
          ??? catch (Exception e) {
          ????? System.out.println("新建目錄操作出錯(cuò)");
          ????? e.printStackTrace();
          ?
          ??? }
          ?
          ? }
          ?
          ? /**
          ?? * 刪除文件
          ?? */
          ? public void delFile(String filePathAndName) {
          ??? try {
          ????? String filePath = filePathAndName;
          ????? filePath = filePath.toString();
          ????? File myDelFile = new File(filePath);
          ????? myDelFile.delete();
          ????? System.out.println("刪除文件操作 成功執(zhí)行");
          ??? }
          ??? catch (Exception e) {
          ????? System.out.println("刪除文件操作出錯(cuò)");
          ????? e.printStackTrace();
          ?
          ??? }
          ?
          ? }
          ?
          ? /**
          ?? * 刪除文件夾
          ?? */
          ? public void delFolder(String folderPath)
          ? {
          ??? try
          ??? {
          ????? delAllFile(folderPath); //刪除完里面所有內(nèi)容
          ????? String filePath = folderPath;
          ????? filePath = filePath.toString();
          ????? File myFilePath = new File(filePath);
          ????? myFilePath.delete(); //刪除空文件夾
          ????? System.out.println("刪除文件夾操作 成功執(zhí)行");
          ??? }
          ??? catch (Exception e)
          ??? {
          ????? System.out.println("刪除文件夾操作出錯(cuò)");
          ????? e.printStackTrace();
          ?
          ??? }
          ?
          ? }
          ?
          ? /**
          ?? * 刪除文件夾里面的所有文件
          ?? * @param path String 文件夾路徑 如 c:/fqf
          ?? */
          ? public void delAllFile(String path)
          ? {
          ??? File file = new File(path);
          ??? if(!file.exists())
          ??? {
          ????? return;
          ??? }
          ??? if(!file.isDirectory())
          ??? {
          ????? return;
          ??? }
          ??? String[] tempList = file.list();
          ??? File temp = null;
          ??? for (int i = 0; i < tempList.length; i++)
          ??? {
          ????? if(path.endsWith(File.separator))
          ????? {
          ??????? temp = new File(path + tempList[i]);
          ????? }
          ????? else
          ????? {
          ??????? temp = new File(path + File.separator + tempList[i]);
          ????? }
          ????? if (temp.isFile())
          ????? {
          ??????? temp.delete();
          ????? }
          ????? if (temp.isDirectory())
          ????? {
          ??????? delAllFile(path+"/"+ tempList[i]);//先刪除文件夾里面的文件
          ??????? delFolder(path+"/"+ tempList[i]);//再刪除空文件夾
          ????? }
          ??? }
          ????????? System.out.println("刪除文件操作 成功執(zhí)行");?
          ? }
          ?
          ? /**
          ?? * 復(fù)制單個(gè)文件
          ?? * @param oldPath String 原文件路徑 如:c:/fqf.txt
          ?? * @param newPath String 復(fù)制后路徑 如:f:/fqf.txt
          ?? */
          ? public void copyFile(String oldPath, String newPath) {
          ??? try {
          ????? int bytesum = 0;
          ????? int byteread = 0;
          ????? File oldfile = new File(oldPath);
          ????? if (oldfile.exists())
          ????? { //文件存在時(shí)
          ??????? InputStream inStream = new FileInputStream(oldPath); //讀入原文件
          ??????? FileOutputStream fs = new FileOutputStream(newPath);
          ??????? byte[] buffer = new byte[1444];
          ??????? int length;
          ??????? while ( (byteread = inStream.read(buffer)) != -1) {
          ????????? bytesum += byteread; //字節(jié)數(shù) 文件大小
          ????????? System.out.println(bytesum);
          ????????? fs.write(buffer, 0, byteread);
          ??????? }
          ??????? inStream.close();
          ????? }
          ??????????? System.out.println("刪除文件夾操作 成功執(zhí)行");?
          ??? }
          ??? catch (Exception e) {
          ????? System.out.println("復(fù)制單個(gè)文件操作出錯(cuò)");
          ????? e.printStackTrace();
          ?
          ??? }
          ?
          ? }
          ?
          ? /**
          ?? * 復(fù)制整個(gè)文件夾內(nèi)容
          ?? * @param oldPath String 原文件路徑 如:c:/fqf
          ?? * @param newPath String 復(fù)制后路徑 如:f:/fqf/ff
          ?? */
          ? public void copyFolder(String oldPath, String newPath) {
          ?
          ??? try
          ??? {
          ????? (new File(newPath)).mkdirs(); //如果文件夾不存在 則建立新文件夾
          ????? File a=new File(oldPath);
          ????? String[] file=a.list();
          ????? File temp=null;
          ????? for (int i = 0; i < file.length; i++)
          ????? {
          ??????? if(oldPath.endsWith(File.separator))
          ??????? {
          ????????? temp=new File(oldPath+file[i]);
          ??????? }
          ??????? else{
          ????????? temp=new File(oldPath+File.separator+file[i]);
          ??????? }
          ?
          ??????? if(temp.isFile())
          ??????? {
          ????????? FileInputStream input = new FileInputStream(temp);
          ????????? FileOutputStream output = new FileOutputStream(newPath + "/" +
          ????????????? (temp.getName()).toString());
          ????????? byte[] b = new byte[1024 * 5];
          ????????? int len;
          ????????? while ( (len = input.read(b)) != -1)
          ????????? {
          ??????????? output.write(b, 0, len);
          ????????? }
          ????????? output.flush();
          ????????? output.close();
          ????????? input.close();
          ??????? }
          ??????? if(temp.isDirectory())
          ??????? {//如果是子文件夾
          ????????? copyFolder(oldPath+"/"+file[i],newPath+"/"+file[i]);
          ??????? }
          ????? }
          ??????????? System.out.println("復(fù)制文件夾操作 成功執(zhí)行");?
          ??? }
          ??? catch (Exception e) {
          ????? System.out.println("復(fù)制整個(gè)文件夾內(nèi)容操作出錯(cuò)");
          ????? e.printStackTrace();
          ?
          ??? }
          ?
          ? }
          ?
          ? /**
          ?? * 移動(dòng)文件到指定目錄
          ?? * @param oldPath String 如:c:/fqf.txt
          ?? * @param newPath String 如:d:/fqf.txt
          ?? */
          ? public void moveFile(String oldPath, String newPath) {
          ??? copyFile(oldPath, newPath);
          ??? delFile(oldPath);
          ?
          ? }
          ?
          ? /**
          ?? * 移動(dòng)文件到指定目錄
          ?? * @param oldPath String 如:c:/fqf.txt
          ?? * @param newPath String 如:d:/fqf.txt
          ?? */
          ? public void moveFolder(String oldPath, String newPath) {
          ??? copyFolder(oldPath, newPath);
          ??? delFolder(oldPath);
          ?
          ? }
          ?
          ? public static void main(String args[])
          ? {
          ? ?System.out.println("使用此功能請(qǐng)按[1]? 功能一:新建目錄");
          ? ?System.out.println("使用此功能請(qǐng)按[2]? 功能二:新建文件");
          ? ?System.out.println("使用此功能請(qǐng)按[3]? 功能三:刪除文件");
          ? ?System.out.println("使用此功能請(qǐng)按[4]? 功能四:刪除文件夾");
          ? ?System.out.println("使用此功能請(qǐng)按[5]? 功能五:刪除文件夾里面的所有文件");
          ? ?System.out.println("使用此功能請(qǐng)按[6]? 功能六:復(fù)制文件");
          ? ?System.out.println("使用此功能請(qǐng)按[7]? 功能七:復(fù)制文件夾的所有內(nèi)容");
          ? ?System.out.println("使用此功能請(qǐng)按[8]? 功能八:移動(dòng)文件到指定目錄");
          ? ?System.out.println("使用此功能請(qǐng)按[9]? 功能九:移動(dòng)文件夾到指定目錄");
          ? ?System.out.println("使用此功能請(qǐng)按[10] 退出程序");
          ? ?
          ?while(!exitnow)
          ?{
          ? ??FileOperate fo=new FileOperate();
          ? ??try
          ? ??{
          ? ??BufferedReader Bin=new BufferedReader(new InputStreamReader(System.in));
          ? ??String a=Bin.readLine();
          ? ??int b=Integer.parseInt(a);
          ? ??
          ? ??switch(b)
          ? ??{
          ? ???case 1:System.out.println("你選擇了功能一? 請(qǐng)輸入目錄名");??
          ? ????? aa=Bin.readLine();
          ? ????? fo.newFolder(aa);
          ? ????? break;
          ? ???case 2:System.out.println("你選擇了功能二? 請(qǐng)輸入文件名");??
          ? ????? aa=Bin.readLine();
          ? ????? System.out.println("請(qǐng)輸入在"+aa+"中的內(nèi)容");
          ? ????? bb=Bin.readLine();
          ? ????? fo.newFile(aa,bb);
          ? ????? break;
          ? ???case 3:System.out.println("你選擇了功能三? 請(qǐng)輸入文件名");??
          ? ????? aa=Bin.readLine();
          ? ????? fo.delFile(aa);
          ? ????? break;
          ? ???case 4:System.out.println("你選擇了功能四? 請(qǐng)輸入文件名");??
          ? ????? aa=Bin.readLine();
          ? ????? fo.delFolder(aa);
          ? ????? break;
          ? ???case 5:System.out.println("你選擇了功能五? 請(qǐng)輸入文件名");??
          ? ????? aa=Bin.readLine();
          ? ????? fo.delAllFile(aa);
          ? ????? break;??
          ? ???case 6:System.out.println("你選擇了功能六? 請(qǐng)輸入文件名");??
          ? ????? aa=Bin.readLine();
          ? ????? System.out.println("請(qǐng)輸入目標(biāo)文件名");?
          ? ????? bb=Bin.readLine();
          ? ????? fo.copyFile(aa,bb);
          ? ????? break;
          ? ???case 7:System.out.println("你選擇了功能七? 請(qǐng)輸入源文件名");??
          ? ????? aa=Bin.readLine();
          ? ????? System.out.println("請(qǐng)輸入目標(biāo)文件名");?
          ? ????? bb=Bin.readLine();
          ? ????? fo.copyFolder(aa,bb);
          ? ????? break;? ?????
          ? ???case 8:System.out.println("你選擇了功能八? 請(qǐng)輸入源文件名");??
          ? ????? aa=Bin.readLine();
          ? ????? System.out.println("請(qǐng)輸入目標(biāo)文件名");?
          ? ????? bb=Bin.readLine();
          ? ????? fo.moveFile(aa,bb);
          ? ????? break;
          ? ??? ?case 9:System.out.println("你選擇了功能九? 請(qǐng)輸入源文件名");??
          ? ????? aa=Bin.readLine();
          ? ????? System.out.println("請(qǐng)輸入目標(biāo)文件名");?
          ? ????? bb=Bin.readLine();
          ? ????? fo.moveFolder(aa,bb);
          ? ????? break;? ?????
          ? ???case 10:exitnow=true;
          ? ?????? System.out.println("程序結(jié)束,請(qǐng)退出");
          ? ????? break;
          ? ???default:System.out.println("輸入錯(cuò)誤.請(qǐng)輸入1-10之間的數(shù)");?? ???? ????? ?
          ? ?? }
          ? ??
          ? ??
          ? ??System.out.println("請(qǐng)重新選擇功能");
          ? ??
          ? ??
          ? ??}
          ? ??catch(Exception e)
          ? ??{
          ? ??System.out.println("輸入錯(cuò)誤字符或程序出錯(cuò)");
          ? ??}
          ? ??
          ?}? ?
          ?}
          }
          posted @ 2007-01-30 13:03 tory 閱讀(195) | 評(píng)論 (0)編輯 收藏

          主站蜘蛛池模板: 黔东| 分宜县| 渝北区| 苍山县| 林口县| 潞西市| 涟水县| 南漳县| 万安县| 屏南县| 闵行区| 新绛县| 临城县| 施甸县| 夏邑县| 襄汾县| 宁南县| 宁津县| 融水| 新化县| 安徽省| 玉树县| 陆丰市| 义乌市| 苗栗市| 柳州市| 平凉市| 浦江县| 合江县| 北辰区| 长乐市| 夹江县| 聂拉木县| 诸暨市| 辉县市| 鹤峰县| 江北区| 丰顺县| 林州市| 微山县| 景德镇市|