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

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

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

    隨筆-19  評(píng)論-2  文章-1  trackbacks-0

     

     

     

    對(duì)簡(jiǎn)單工廠的特殊情況進(jìn)行測(cè)試——工廠角色與具體產(chǎn)品角色合并

    代碼如下:

    abstract class AbstractClass{

           private static String name;

           public final static AbstractClass format(String value){

                  name = value;

                  return new Embody();

           }

           public String getMsg(){

                  return name;

           }

           public abstract void fun1();

    }

     

    class Embody extends AbstractClass{

           public void fun1(){

                  System.out.println("the enbody extends AbstractClass" + getMsg());

           }

    }

    public class tt {

           public static void main(String args[]){

                  AbstractClass.format("name").fun1();

           }

    }

    上面的代碼中通過工廠方法把子類具體的實(shí)例化隱藏了起來。

    下面是對(duì)一個(gè)普通的簡(jiǎn)單工廠模式的實(shí)現(xiàn):

    代碼測(cè)試:

          

    package sky;

    //產(chǎn)品抽象類

    abstract class People{

           public String name; //名字

           public String occuptationl;  //職業(yè)

           abstract public String getMsg();

    }

    //學(xué)生類——具體產(chǎn)品

    class Student extends People{

           private String name;

           private String occupation;

           private String grade;

          

           public Student(String name,String occupation){

                  this.name = name;

                  this.occupation = occupation;

           }

           public void setGrade(String grade){

                  this.grade = grade;

           }

           public String getGrade(){

                  return grade;

           }

           public String getMsg(){

                  return getOccupation()+getName()+getGrade();

           }

           public String getOccupation(){

                  return occupation;

           }

           public String getName(){

                  return name;

           }

          

    }

    //教師類——具體產(chǎn)品類

    class Teacherextends People{

           private String name;

           private String occupation;

           private int wage;

          

           public Teacher(String name,String occupation){

                  this.name = name;

                  this.occupation = occupation;

           }

           public void setWage(int wage){

                  this.wage = wage;

           }

           public String getMsg(){

                  return getOccupation()+getName() + getWage();

           }

           public String getOccupation(){

                  return occupation;

           }

           public String getName(){

                  return name;

           }

           public int getWage(){

                  return wage;

           }

    }

    //工廠類

    class factory{

           public static People build(String name,String occupation) throws BadPeopleException{

                  if(occupation.equals("student")){

                         return new Student(name,occupation);

                  }

                  else if(occupation.equals("teacher")){

                         return new Teacher(name,occupation);

                  }else{

                         throw new BadPeopleException("can not found the people");

                  }

           }

    }

    //異常處理

    class BadPeopleException extends Exception{

           public BadPeopleException(String msg){

                  super(msg);

           }

    }

     

    public class test{

           public static void main(String args[]){

                  try {

                         Student t = (Student) factory.build("sky","student");

     //從這個(gè)顯示轉(zhuǎn)換申明中我并沒有看到簡(jiǎn)單工廠的好處

                         factory.build("fly","teacher");

    /*難道只有這樣才可以看到它的優(yōu)點(diǎn)嗎?——能夠避免客戶決定什么時(shí)候創(chuàng)建哪個(gè)實(shí)例*/

                         t.setGrade("three");

                         System.out.println(t.getMsg());

                  } catch (BadPeopleException e) {

                         // TODO Auto-generated catch block

                         e.printStackTrace();

                  }

           }

    }

     

         問題:接口和抽象類的區(qū)別在哪里?    

     

     

      13 工廠方法模式 <java與模式> ---電子書 page146

     

           組成為:抽象工廠、具體工廠、抽象產(chǎn)品、具體產(chǎn)品

    其中抽象工廠是為外部訪問內(nèi)部的一個(gè)接口,它的好處是可以通過擴(kuò)張具體產(chǎn)品和具體工廠而不用改變客戶端的代碼.

     

    一個(gè)簡(jiǎn)單的測(cè)試代碼如下:

     

    interface Fruit{

           void grow();

           void harvest();

    }

    class Apple implements Fruit{

           private int treeNumber;

          

           public void grow(){

                  System.out.println("Apple.grow()");

           }

           public void harvest(){

                  System.out.println("Apple.harvest()");

           }

           public void setTreeNumber(int number){

                  treeNumber = number;

           }

           public int getTreeNumber(){

                  return treeNumber;

           }

          

    }

    class StrawBerry implements Fruit{

           public void grow(){

                  System.out.println("StrawBerry.grow()");

           }

           public void harvest(){

                  System.out.println("StrawBerry.harvest()");

           }

    }

     abstract class Gardener{

          abstract public Fruit product();

     }

     

     class AppleGardener extends Gardener{

          public Fruit product(){

                 return new Apple();

          }

     }   

     class StrawBerryGardener extends Gardener{

          public Fruit product(){

                 return new StrawBerry();

          }

     }

    public class Client {

           public static void main(String args[]){

                  Fruit apple,strawberry;

                  AppleGardener applegarder = new AppleGardener();

                  StrawBerryGardener strawberrygarder = new StrawBerryGardener();

                  apple = applegarder.product();

                  strawberry = strawberrygarder.product();

                  apple.grow();

                  strawberry.grow();

           }

    }

    posted on 2005-07-30 20:54 sky 閱讀(135) 評(píng)論(0)  編輯  收藏

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产亚洲精久久久久久无码AV| 亚洲成av人影院| 人妖系列免费网站观看| 国产aⅴ无码专区亚洲av麻豆 | 亚洲综合男人的天堂色婷婷| 台湾一级毛片永久免费 | 在线观看免费黄网站| 亚洲午夜久久久精品影院| 日本亚洲免费无线码| yellow视频免费在线观看| 亚洲麻豆精品果冻传媒| 免费国产美女爽到喷出水来视频| 中文字幕无码日韩专区免费| 一本色道久久综合亚洲精品蜜桃冫| 亚洲无码日韩精品第一页| 真人做人试看60分钟免费视频| 日韩毛片一区视频免费| 亚洲春色另类小说| 最新国产AV无码专区亚洲| 免费av欧美国产在钱| 成av免费大片黄在线观看| 国内精品久久久久影院亚洲| 久久青青草原亚洲av无码| 黄色成人网站免费无码av| 好久久免费视频高清| 综合一区自拍亚洲综合图区| 亚洲精品国产第1页| 国产亚洲精品a在线观看| 麻豆成人精品国产免费| 日韩在线免费视频| 9久久免费国产精品特黄| 亚洲色精品三区二区一区| 亚洲人成网站影音先锋播放| 亚洲国产成人久久综合一区77| 最近中文字幕免费mv视频7| 精品无码国产污污污免费网站| 国产精品极品美女自在线观看免费 | 亚洲国产日韩成人综合天堂| 香蕉免费一区二区三区| 久久精品成人免费国产片小草| 亚洲Aⅴ在线无码播放毛片一线天 亚洲avav天堂av在线网毛片 |