小哈兒的 學(xué)習(xí)日記

          像瘋子一樣去戰(zhàn)斗!
          posts - 13, comments - 0, trackbacks - 0, articles - 0

          2007年8月28日

              今天調(diào)試一個bug,迷惑了很久。最后發(fā)現(xiàn)是關(guān)于首選項取值存值問題。
             這里ps為IPreferenceStore對象.

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

             ps.setValue(XXX_KEY, "XXX")時首先和default中的XXX_KEY比較,如果不同的話才put進(jìn)去,否則就刪除。這也是我今天這個bug的原因。修改辦法是用putValue函數(shù)來代替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標(biāo)簽起初被設(shè)計成為定義文檔的內(nèi)容。通過使用像<h1>,<p>,<table>這樣的標(biāo)簽他們應(yīng)該表達(dá)的是"這是一個標(biāo)題","這是一個段落","這是一張表格",而布局該由瀏覽器來處理并非使用格式化標(biāo)簽. 作為兩大瀏覽器 - 網(wǎng)景 和 IE - 不斷地將新的HTML標(biāo)簽和屬性(像<font>標(biāo)簽和顏色屬性)添加到原來的HTML規(guī)格中,這讓建立清晰的HTML文檔內(nèi)容并從形式中分離出來變的越來越困難.為了解決這個難題,W3C 這個非贏利的,建立標(biāo)準(zhǔn)的組織,為HTML4.0增加了樣式。所有主流瀏覽器都支持樣式表。
                  樣式表定義元素怎樣去顯示,就像在HTML3.2中字體標(biāo)簽和顏色屬性一般保存在一個外部的.css文件一樣.外部樣式表能夠讓你改變所有出現(xiàn)在你WEB中的外觀和布局,而僅僅通過編輯一個單獨的CSS文檔.(原理就是一動多變)。
                   當(dāng)多于一種的樣式指定一HTML元素時使用怎樣的樣式呢?
          1. 瀏覽器默認(rèn)
          2. 外部樣式表
          3. 內(nèi)嵌樣式表(在<head>標(biāo)簽內(nèi))
          4. 行內(nèi)樣式(在一HTML元素內(nèi)) (最高優(yōu)先級)

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

          2007年4月30日

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

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

           

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

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

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

          }

                     
                   你可以創(chuàng)建一個HelloCommand的實例然后執(zhí)行這個方法。

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

          2007年4月23日

          在實現(xiàn)了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 
          }


          在實現(xiàn)了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日

                 工廠方法設(shè)計模式是一種使用工廠原則的創(chuàng)造型模式。工廠原則就是 通過調(diào)用一個方法,這個方法創(chuàng)造一個對象的實例然后將它返回。通過向這個方法傳遞參數(shù)來決定返回哪個類型的對象。
                 工廠方法設(shè)計模式使用繼承來決定返回哪個對象。基礎(chǔ)的創(chuàng)造類是抽象的。而具體的創(chuàng)造類繼承這個基類。工廠方法在基類中聲明。如果工廠方法是抽象的,那么所有繼承這個類的類都必須有這個方法。如果不是,則可以根據(jù)需要選擇覆蓋它與否。
                 當(dāng)一個類想實例化其中一個具體類的實例時,這個類就可以通過調(diào)用具體類的工廠方法來生成正確的對象。
                 舉例來說,假設(shè)我們有兩個類,Product1和Product2。為了能接收到這兩個類任何一個的實例,我們必須讓他們繼承或?qū)崿F(xiàn)相同的類或接口。我們創(chuàng)造一個叫做Creator的抽象類。如下:
          public abstract class Creator{
              
          public abstract getProduct();
          }
           
                現(xiàn)在我們創(chuàng)造兩個類繼承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)編輯 收藏

                 單例模式是最簡單的一種設(shè)計模式,它是創(chuàng)造型的。一個單例類僅允許他的一個實例被初始化。它檢查一個實例是否已經(jīng)被創(chuàng)建,如果是則返回這個實例。下面是一個單例類的基本結(jié)構(gòu):
           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 的域,構(gòu)造函數(shù)被設(shè)為私有的,這樣調(diào)用它的類就不能使用構(gòu)造器來創(chuàng)建它的一個實例。從一個單例類中取得一個實例的唯一辦法是通過public static getInstance()方法。通過以下方法:
          Singleton instance=Singleton.getInstance();
          這個 getInstance()通過測試實例與是否為空來檢查這個類的唯一實例是否被創(chuàng)建,如果是空的,則創(chuàng)建一個實例,如果非空,則返回這個已經(jīng)存在的實例,一旦一個實例被創(chuàng)建了,那么 getInstance()這個方法就返回這個實例。

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

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

          2007年4月12日

          Design Pattern Editor Plugin for Eclipse
          可以通過選擇模版來生成對應(yīng)模式的java代碼,倒不失為一個學(xué)習(xí)設(shè)計模式的好方法。


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

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

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

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

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

          Example example=new Example();

          Example example
          =new Example(參數(shù));

          如果創(chuàng)建Example時做的事情不是如賦值這樣簡單的事,可能是很長一段代碼,如果也寫入構(gòu)造函數(shù)中,那明顯的就違背了面向?qū)ο蟮脑瓌t.
          我們需要將創(chuàng)建實例的責(zé)任與使用實例的責(zé)任分開, 使得

          Example example=new Example(參數(shù));

          就是簡單的責(zé)任:使用Example這個實例;而創(chuàng)建Example的任務(wù)就交給了Factory工廠模式.

          按照傳統(tǒng)方法,我們?nèi)绻枰^承Example類,生成MyExample,就需要定義Example為Interface,然后,不斷繼承這個Interface,生成許多子類,造成以后代碼維護(hù)是如此的困難。

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

          我們生成一個Factory,它專門負(fù)責(zé)生成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();//還有其它標(biāo)志,不具體寫了。

          具體使用:
          工廠模式有以下三種:
          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(){
               
            }

          }


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

          簡而言之,工廠模式的目的就是用來實現(xiàn)實例分發(fā)。

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

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

          主站蜘蛛池模板: 鱼台县| 禹州市| 昂仁县| 美姑县| 开平市| 宝应县| 曲麻莱县| 龙陵县| 鄂托克前旗| 武山县| 连江县| 汕尾市| 田林县| 轮台县| 石楼县| 宁河县| 鄂伦春自治旗| 汕尾市| 宿迁市| 科技| 贞丰县| 柘城县| 烟台市| 读书| 齐河县| 扎鲁特旗| 隆尧县| 肇庆市| 和田县| 仁怀市| 霍邱县| 息烽县| 合水县| 呼和浩特市| 桃源县| 东乌| 宁城县| 宿迁市| 卢氏县| 林州市| 广元市|