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

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

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

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

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

          有什么說(shuō)的不對(duì)的地方歡迎批評(píng)指正.

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

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

          通過(guò)文件得到Project:

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

          通過(guò)文件得到全路徑:

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

          得到整個(gè)Workspace的根:

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

          從根來(lái)查找資源:

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


          從Bundle來(lái)查找資源:

          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();

          從編輯器來(lái)獲得編輯文件
          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) | 評(píng)論 (0)編輯 收藏

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

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

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

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

           

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

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

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

          }

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

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

          在實(shí)現(xiàn)了IWorkbenchWindowActionDelegate接口的類(lèi)中:
          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 
          }


          在實(shí)現(xiàn)了IObjectActionDelegate 接口的類(lèi)中:
          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();


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

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

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

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

          }

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

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

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

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

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


          越來(lái)越覺(jué)得eclipse以及各方開(kāi)發(fā)的插件的強(qiáng)大了,好像潛意識(shí)里需要什么東西,在某一天自己就會(huì)蹦出來(lái)這樣一個(gè)插件。

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

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

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

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

          Example example=new Example();

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

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

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

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

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

          如果,我們開(kāi)始就采用了工廠模式,也許就沒(méi)有這么多的煩惱了。

          我們生成一個(gè)Factory,它專(zhuān)門(mén)負(fù)責(zé)生成Example的實(shí)例。
          public class Factory {
               
          public static Example getIntance() 
             
                    
          if(flag == 1)
                       
          return new MyExample();
                    
          if(flag == 2)
                       
          return new YourExample();
               }

          }


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

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

          具體使用:
          工廠模式有以下三種:
          1. 簡(jiǎn)單工廠(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(){
               
            }

          }


          這里,我們需要?jiǎng)?chuàng)建多個(gè)對(duì)象,復(fù)雜性提高,于是需要采用Abstract Factory來(lái)封裝共同屬性和方法,而將不同的屬性和方法通過(guò)子類(lèi)來(lái)實(shí)現(xiàn)。

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

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

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

          僅列出標(biāo)題
          共2頁(yè): 1 2 下一頁(yè) 
          主站蜘蛛池模板: 湘潭县| 托里县| 若尔盖县| 南康市| 峡江县| 渑池县| 杭州市| 宁海县| 蓬安县| 寿阳县| 大足县| 靖江市| 昌邑市| 灵武市| 敦煌市| 遵化市| 高平市| 黄骅市| 翁牛特旗| 武夷山市| 兴业县| 勐海县| 平江县| 广宁县| 三门县| 长海县| 合作市| 措美县| 武穴市| 高邮市| 秀山| 炎陵县| 南皮县| 孝感市| 和平区| 茌平县| 三穗县| 时尚| 乌拉特前旗| 东乌| 丹寨县|