小哈兒的 學習日記

          像瘋子一樣去戰斗!
          posts - 13, comments - 0, trackbacks - 0, articles - 0

          2007年8月28日

              今天調試一個bug,迷惑了很久。最后發現是關于首選項取值存值問題。
             這里ps為IPreferenceStore對象.

             ps.getString(XXX_KEY)是首選查找首選項 ,如果取出的值為空,如果有default值的話則執行ps.getDefault(XXX_KEY)。

             ps.setValue(XXX_KEY, "XXX")時首先和default中的XXX_KEY比較,如果不同的話才put進去,否則就刪除。這也是我今天這個bug的原因。修改辦法是用putValue函數來代替setValue.

          有什么說的不對的地方歡迎批評指正.

          posted @ 2007-08-28 22:17 dayue 閱讀(1118) | 評論 (0)編輯 收藏

          2007年5月24日

          從插件中獲得絕對路徑:
                  
          TestPlugin.getDefault().getStateLocation().makeAbsolute().toFile().getAbsolutePath());

          通過文件得到Project:

          IProject project = ((IFile)o).getProject();

          通過文件得到全路徑:

          String path = ((IFile)o).getLocation().makeAbsolute().toFile().getAbsolutePath();

          得到整個Workspace的根:

          IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();

          從根來查找資源:

          IResource resource = root.findMember(new Path(containerName));


          從Bundle來查找資源:

          Bundle bundle = Platform.getBundle(pluginId);
          URL fullPathString
          = BundleUtility.find(bundle, filePath);

          得到Appliaction workspace:

          Platform.asLocalURL(PRODUCT_BUNDLE.getEntry("")).getPath()).getAbsolutePath();

          得到runtimeworkspace:
            
          Platform.getInstanceLocation().getURL().getPath();

          從編輯器來獲得編輯文件
          IEditorPart editor = ((DefaultEditDomain)(parent.getViewer().getEditDomain())).getEditorPart();
          IEditorInput input
          = editor.getEditorInput();
             if(input instanceof IFileEditorInput){
               IFile file
          = ((IFileEditorInput)input).getFile();
             }

          posted @ 2007-05-24 18:07 dayue 閱讀(355) | 評論 (0)編輯 收藏

          2007年5月8日

                 CSS 意思就是 疊層樣式表Cascading Style Sheets ,樣式定義了HTML元素怎樣去顯示,樣式一般存儲在樣式表中,外部樣式表存儲在CSS文件中。使用CSS,你的HTML文檔可以用不同的樣式輸出來顯示。
                 HTML標簽起初被設計成為定義文檔的內容。通過使用像<h1>,<p>,<table>這樣的標簽他們應該表達的是"這是一個標題","這是一個段落","這是一張表格",而布局該由瀏覽器來處理并非使用格式化標簽. 作為兩大瀏覽器 - 網景 和 IE - 不斷地將新的HTML標簽和屬性(像<font>標簽和顏色屬性)添加到原來的HTML規格中,這讓建立清晰的HTML文檔內容并從形式中分離出來變的越來越困難.為了解決這個難題,W3C 這個非贏利的,建立標準的組織,為HTML4.0增加了樣式。所有主流瀏覽器都支持樣式表。
                  樣式表定義元素怎樣去顯示,就像在HTML3.2中字體標簽和顏色屬性一般保存在一個外部的.css文件一樣.外部樣式表能夠讓你改變所有出現在你WEB中的外觀和布局,而僅僅通過編輯一個單獨的CSS文檔.(原理就是一動多變)。
                   當多于一種的樣式指定一HTML元素時使用怎樣的樣式呢?
          1. 瀏覽器默認
          2. 外部樣式表
          3. 內嵌樣式表(在<head>標簽內)
          4. 行內樣式(在一HTML元素內) (最高優先級)

          posted @ 2007-05-08 17:48 dayue 閱讀(315) | 評論 (0)編輯 收藏

          2007年4月30日

          1. 單一職責原則(SRP):一個類應當只有一個改變的原因,類只需要知道一件事情,它們應當有一個單獨的職責,要點就是當一個類需要改變時,應當只有一個原因。
          2. 開放-封閉原則(OCP):軟件實體(類、模塊、函數等)應當為擴展而開放,又為修改而封閉。這個原則有一個相當詳細的定義,但是一個簡單的意思是:你應當能夠改變一個模塊的周邊環境而無須改變模塊本身。
          3. Liskov替換原則(LSP):子類型(subtypes)必須是為它們的基類型(base types)可替代的。
          4. 依存關系倒置原則(DIP) :A.高層模塊應當不依賴低層模塊,它們應當依賴于抽象。
                                                          B.抽象應當不依賴于細節,細節應當依賴于抽象。
            更好的描述是:不要依賴那些容易變化的具體類。如果你要繼承一個類,從一個抽象類繼承吧。如果你要持有一個類的引用,從一個抽象的類引用吧。如果你要調用一個函數,從一個抽象的函數調用吧。
          5. 接口隔離原則(ISP):客戶不應當依賴那些它們根本不用的方法。

          總結:
          五個簡單的原則是:
          1、SRP--一個類應當只有一個發生變化的原因。
          2、OCP――應當能夠改變一個類的環境,而無須改變類本身。
          3、LSP――避免造成派生類的方法非法或退化,一個基類的用戶應當不需要知道這個派生類。
          4、DIP ――用依賴于接口和抽象類來替代依賴容易變化的具體類。
          5、ISP――給一個對象的每一個用戶一個接口,這個接口僅有用戶需要的方法。

           

          posted @ 2007-04-30 15:27 dayue 閱讀(418) | 評論 (0)編輯 收藏

                  命令模式是一個行為型模式,允許你創造一個對象的命令然后在需要時候可以執行。當你想創造一個undo/redo,log操作或者在稍晚時候執行命令時這個模式是有用的。
                  在這個模式里一個命令接口是必需的。對一個命令對象來說,它必須事先實現這個命令的方法。下面是一個簡單的命令接口,有一個方法需要實現執行的。
          public interface Command{
           
                   
          public void execute();
          }
                   所有被命令的類必須實現這個命令接口。下面是一個簡單的命令:當執行時控制臺打印"hello world"。
          public class HelloCommand implements Command{
                   
          public void execute(){

                    System.out.println(
          "Hello World");
          }

          }

                     
                   你可以創建一個HelloCommand的實例然后執行這個方法。

          posted @ 2007-04-30 14:13 dayue 閱讀(298) | 評論 (0)編輯 收藏

          2007年4月23日

          在實現了IWorkbenchWindowActionDelegate接口的類中:
          private IWorkbenchWindow window;

          public void init(IWorkbenchWindow window) {
             
          this.window = window;
          }

          public void run(IAction action) {
             Shell parentShell 
          = window.getShell();
             MyDialog dialog 
          = new MyDialog(parentShell, );
              etc 
          }


          在實現了IObjectActionDelegate 接口的類中:
          private IWorkbenchPart targetPart;

          public void setActivePart(IAction action, IWorkbenchPart targetPart)
          {
             
          this.targetPart = targetPart;
          }


          public void run(IAction action) {
             IWorkbenchPartSite site 
          = targetPart.getSite();
             MyDialog dialog 
          = new MyDialog(site, );
              etc 
          }


          IViewPart 或者IEditorPart
          IShellProvider shellProvider = viewOrEditor.getSite();
          PlatformUI:
          Shell parentShell =
             PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();

          Display
          Shell parentShell = Display.getDefault().getActiveShell();


          以上各種方法對于獲取其它的一些rcp中的重要對象也都有借鑒意義。

          posted @ 2007-04-23 14:00 dayue 閱讀(1216) | 評論 (0)編輯 收藏

          2007年4月18日

                 工廠方法設計模式是一種使用工廠原則的創造型模式。工廠原則就是 通過調用一個方法,這個方法創造一個對象的實例然后將它返回。通過向這個方法傳遞參數來決定返回哪個類型的對象。
                 工廠方法設計模式使用繼承來決定返回哪個對象。基礎的創造類是抽象的。而具體的創造類繼承這個基類。工廠方法在基類中聲明。如果工廠方法是抽象的,那么所有繼承這個類的類都必須有這個方法。如果不是,則可以根據需要選擇覆蓋它與否。
                 當一個類想實例化其中一個具體類的實例時,這個類就可以通過調用具體類的工廠方法來生成正確的對象。
                 舉例來說,假設我們有兩個類,Product1和Product2。為了能接收到這兩個類任何一個的實例,我們必須讓他們繼承或實現相同的類或接口。我們創造一個叫做Creator的抽象類。如下:
          public abstract class Creator{
              
          public abstract getProduct();
          }
           
                現在我們創造兩個類繼承Creator,叫做Product1Creator和Product2Creator。每一個都有一個getProduct方法。
          例如Product1Creator:
          public class Product1Creator extends Creator{

                     
          public Product getProduct(){
                           
                       
          return new Product1();
          }

          }

          posted @ 2007-04-18 13:48 dayue 閱讀(233) | 評論 (0)編輯 收藏

                 單例模式是最簡單的一種設計模式,它是創造型的。一個單例類僅允許他的一個實例被初始化。它檢查一個實例是否已經被創建,如果是則返回這個實例。下面是一個單例類的基本結構:
           1package dp.singleton;
           2
           3public class Singleton {
           4    private static Singleton singleton;
           5    private Singleton(){
           6        
           7    }

           8    
           9    public static Singleton getInstance(){
          10        if(singleton==null){
          11            singleton=new Singleton();
          12        }

          13        return singleton;
          14    }

          15 
          16}

          17
          在這個類中,有一個private static 的域,構造函數被設為私有的,這樣調用它的類就不能使用構造器來創建它的一個實例。從一個單例類中取得一個實例的唯一辦法是通過public static getInstance()方法。通過以下方法:
          Singleton instance=Singleton.getInstance();
          這個 getInstance()通過測試實例與是否為空來檢查這個類的唯一實例是否被創建,如果是空的,則創建一個實例,如果非空,則返回這個已經存在的實例,一旦一個實例被創建了,那么 getInstance()這個方法就返回這個實例。

          另一種稍微有些不同的實現單例類的方法是將域聲明改為
          private static final Singleton singleton=new Singleton();
          這種方法總是創建一個實例。

          posted @ 2007-04-18 10:17 dayue 閱讀(255) | 評論 (0)編輯 收藏

          2007年4月12日

          Design Pattern Editor Plugin for Eclipse
          可以通過選擇模版來生成對應模式的java代碼,倒不失為一個學習設計模式的好方法。


          越來越覺得eclipse以及各方開發的插件的強大了,好像潛意識里需要什么東西,在某一天自己就會蹦出來這樣一個插件。

          posted @ 2007-04-12 04:06 dayue 閱讀(455) | 評論 (0)編輯 收藏

          設計模式(Design Patterns)筆記之一:Abstract Factory

          定義:提供一個創建一系列相關或相互依賴對象的接口,而無需指定它們具體的類。提供創建對象的接。

          工廠模式是我們最常用的模式,是用來創建對象的,它就相當于創建對象的new。
          例如我們有一個類Example,我們要創建Example的對象:

          Example example=new Example();

          Example example
          =new Example(參數);

          如果創建Example時做的事情不是如賦值這樣簡單的事,可能是很長一段代碼,如果也寫入構造函數中,那明顯的就違背了面向對象的原則.
          我們需要將創建實例的責任與使用實例的責任分開, 使得

          Example example=new Example(參數);

          就是簡單的責任:使用Example這個實例;而創建Example的任務就交給了Factory工廠模式.

          按照傳統方法,我們如果需要繼承Example類,生成MyExample,就需要定義Example為Interface,然后,不斷繼承這個Interface,生成許多子類,造成以后代碼維護是如此的困難。

          如果,我們開始就采用了工廠模式,也許就沒有這么多的煩惱了。

          我們生成一個Factory,它專門負責生成Example的實例。
          public class Factory {
               
          public static Example getIntance() 
             
                    
          if(flag == 1)
                       
          return new MyExample();
                    
          if(flag == 2)
                       
          return new YourExample();
               }

          }


          然后,那么在你的程序中,如果要實例化MyExample時.就使用

          Example example=Factory.getIntance();//還有其它標志,不具體寫了。

          具體使用:
          工廠模式有以下三種:
          1. 簡單工廠(Simple Factory)
          2. 工廠方法(Factory Method);
          3. 抽象工廠(Abstract Factory)。

          我們先看一段代碼
          public abstract class Factory{
            
          public abstract MyExample creator();
            
          public abstract YourExample creator(); 
          }


          public class FirstFactory extends Factory{
            
          public MyExample creator(){
               
            }

            
          public YourExample creator(){
               
            }

          }


          public class SecondFactory extends Factory{
            
          public MyExample creator(){
               
            }

            
          public YourExample creator(){
               
            }

          }


          這里,我們需要創建多個對象,復雜性提高,于是需要采用Abstract Factory來封裝共同屬性和方法,而將不同的屬性和方法通過子類來實現。

          簡而言之,工廠模式的目的就是用來實現實例分發。

          工廠模式中幾種類型的一些差別:
          簡單工廠模式是根據參數來決定產生實例;
          簡單工廠模式, 核心是一個實類;
          工廠方法模式的核心是一個抽象工廠類;
          工廠方法模式可以允許很多實的工廠類從抽象工廠類繼承下來, 從而可以在實際上成為多個簡單工廠模式的綜合;
          工廠方法一般只創建一個實例,而Abstract Factory創建多個實例。

          posted @ 2007-04-12 03:53 dayue 閱讀(231) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 永登县| 阿克陶县| 马边| 乐清市| 南通市| 海伦市| 扶风县| 大宁县| 邵东县| 石嘴山市| 鄂托克前旗| 左贡县| 宣威市| 渭源县| 华坪县| 凯里市| 林州市| 巢湖市| 南皮县| 汉中市| 射洪县| 泰来县| 天气| 礼泉县| 利辛县| 玛多县| 江油市| 虎林市| 剑阁县| 黎城县| 上林县| 隆化县| 深圳市| 天津市| 肥西县| 德州市| 原阳县| 丹江口市| 淳化县| 盈江县| 读书|