小哈兒的 學習日記

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

          2007年4月18日

              今天調試一個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 閱讀(1119) | 評論 (0)編輯 收藏

          從插件中獲得絕對路徑:
                  
          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 閱讀(356) | 評論 (0)編輯 收藏

                 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)編輯 收藏

          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 閱讀(420) | 評論 (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)編輯 收藏

          在實現了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 閱讀(1218) | 評論 (0)編輯 收藏

                 工廠方法設計模式是一種使用工廠原則的創造型模式。工廠原則就是 通過調用一個方法,這個方法創造一個對象的實例然后將它返回。通過向這個方法傳遞參數來決定返回哪個類型的對象。
                 工廠方法設計模式使用繼承來決定返回哪個對象。基礎的創造類是抽象的。而具體的創造類繼承這個基類。工廠方法在基類中聲明。如果工廠方法是抽象的,那么所有繼承這個類的類都必須有這個方法。如果不是,則可以根據需要選擇覆蓋它與否。
                 當一個類想實例化其中一個具體類的實例時,這個類就可以通過調用具體類的工廠方法來生成正確的對象。
                 舉例來說,假設我們有兩個類,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 閱讀(234) | 評論 (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 閱讀(257) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 安远县| 逊克县| 沛县| 青川县| 抚远县| 乌拉特中旗| 永春县| 新民市| 资阳市| 新密市| 武山县| 湖北省| 吴旗县| 石河子市| 富阳市| 亚东县| 银川市| 连山| 宁武县| 西丰县| 大港区| 江城| 德阳市| 雅江县| 修武县| 沂南县| 固安县| 基隆市| 南部县| 万安县| 阿尔山市| 白银市| 沛县| 绵竹市| 图们市| 郑州市| 库车县| 黎川县| 永仁县| 四子王旗| 樟树市|