<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-3  評論-0  文章-0  trackbacks-0

     

    設計模式之工廠模式:
    1、    掌握什么叫反射
    2、    掌握class類的作用
    3、    通過反射實例化對象
    4、    通過反射調用類中方法的操作原理
    5、    工廠設計的改進,重點掌握其思想,程序和配置相分離
    package fac.cn;
    interface Fruit{
        
    public void eat();
    }
    class Apple implements Fruit{
        
    public void eat(){
            System.out.println(
    "吃蘋果");
        }
    }
    class Orange implements Fruit{
        
    public void eat(){
            System.out.println(
    "吃橘子");
        }
    }

    class Factory{
        
    public static Fruit getInstance(String className){
            Fruit f
    =null;
            
    if(className.equals("Apple"))
                f
    =new Apple();
            
    else if(className.equals("Orange"))
                f
    =new Orange();
            
    return f;
        }
    }
    public class FactoryDemo {
        
    public static void main(String args[]){
            Fruit fruit
    =Factory.getInstance("Apple");
            fruit.eat();
        }

    }
    注:本程序的確實現了工廠操作。所有的問題集中在工廠操作中,因為每次只要一增加子類,則必須修改工廠。此時可以根據反射機制來完成,通過Class類來修改工廠
    如下表即為修改的工廠類和主類
    class Factory{
        
    public static Fruit getInstance(String className){
            Fruit f
    =null;
                
    try {
                    f
    =(Fruit)Class.forName(className).newInstance();
                } 
                
    catch (Exception e) {                
                    e.printStackTrace();
                }
            
    return f;
        }
    }
    public class FactoryDemo2 {
        
    public static void main(String args[]){
            Fruit fruit
    =Factory.getInstance("fac2.cn.Apple");
            fruit.eat();
        }

    }
    注:在以上操作中,工廠類完全不用修改,但是每次操作應用時,都必須輸入很長的包.類.名稱,使用時很不方便。最好的方法是通過一個別名來表示這個完成的包.類名稱,而且在類增加的時候,別名也可以自動增加。所以如果想要完成這樣的操作,可以使用屬性類配置

    class MyPropertiesOperate{//屬性操作類
        private Properties pro=null;
        
    private File file=new File("D:\\Workplace"+File.separator+"Fruit.properties");
        
    public MyPropertiesOperate(){
            
    this.pro=new Properties();
            
    if(file.exists()){//文件存在
                try {
                    pro.loadFromXML(
    new FileInputStream(file)); //讀取
                } 
                
    catch (Exception e) {                
                }
            }
            
    else this.save();
        }
        
        
    private void save(){
            
    this.pro.setProperty("Apple""cn3.Apple");
            
    this.pro.setProperty("Orange""cn3.Orange");
            
    try {
                
    this.pro.storeToXML(new FileOutputStream(this.file),"Fruit"); //讀取
            } 
            
    catch (Exception e) {                
            }
        }
        
    public Properties getProperties(){
            
    return this.pro;
        }
        
    }
    public class FactoryDemo3 {
        
    public static void main(String args[]){
            Properties myPro
    =new MyPropertiesOperate().getProperties();    
            Fruit fruit
    =Factory.getInstance(myPro.getProperty("Orange"));
            fruit.eat();
        }

    }
    注:從以上的操作代碼中發現,程序通過一個配置文件,可以控制程序的執行,也就是達到了配置文件和程序相分離的目的。這個設計思想現在還在使用中,包括三大框架等。最新的設計理論,是將注釋寫入代碼之中,讓注釋起到程序控制的作用。要實現此操作,則使用Annotation完成

     

    posted on 2012-06-28 16:47 兔小翊 閱讀(108) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 免费观看美女用震蛋喷水的视频| 中文字幕无码免费久久9一区9| 日韩精品内射视频免费观看| 亚洲国产精彩中文乱码AV| 国产精品免费久久| 亚洲AV中文无码乱人伦下载 | 亚洲中文字幕精品久久| 国产黄色免费网站| 亚洲三级中文字幕| 国产精品视频免费一区二区| 亚洲熟妇AV日韩熟妇在线| 免费高清资源黄网站在线观看| 中文字幕亚洲综合小综合在线| 成在人线AV无码免费| 亚洲AV日韩AV永久无码色欲| 免费h成人黄漫画嘿咻破解版| 黄色毛片免费观看| 亚洲综合另类小说色区| 成人免费乱码大片A毛片| 久久精品国产亚洲网站| 88av免费观看| 亚洲欧美国产欧美色欲| 亚洲国产成人乱码精品女人久久久不卡| 人妖系列免费网站观看| 亚洲国产精品第一区二区| 国产成人免费在线| 亚洲av无一区二区三区| 亚洲人成网站18禁止一区| 日日麻批免费40分钟无码| 亚洲中文字幕一二三四区| 亚洲成a人片在线观看国产| 久久免费国产精品| 亚洲国产精品综合久久网各| 国产成人精品免费直播 | 亚洲成年人在线观看| aa级一级天堂片免费观看| 四虎影视永久在线精品免费| 亚洲黄色在线视频| 免费国产怡红院在线观看| 91香蕉国产线在线观看免费| 亚洲av成人无码网站…|