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

           

           

           

          對(duì)簡(jiǎn)單工廠(chǎng)的特殊情況進(jìn)行測(cè)試——工廠(chǎng)角色與具體產(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();

                 }

          }

          上面的代碼中通過(guò)工廠(chǎng)方法把子類(lèi)具體的實(shí)例化隱藏了起來(lái)。

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

          代碼測(cè)試:

                

          package sky;

          //產(chǎn)品抽象類(lèi)

          abstract class People{

                 public String name; //名字

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

                 abstract public String getMsg();

          }

          //學(xué)生類(lèi)——具體產(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;

                 }

                

          }

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

          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;

                 }

          }

          //工廠(chǎng)類(lèi)

          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)換申明中我并沒(méi)有看到簡(jiǎn)單工廠(chǎng)的好處

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

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

                               t.setGrade("three");

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

                        } catch (BadPeopleException e) {

                               // TODO Auto-generated catch block

                               e.printStackTrace();

                        }

                 }

          }

           

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

           

           

            13 工廠(chǎng)方法模式 <java與模式> ---電子書(shū) page146

           

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

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

           

          一個(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 閱讀(134) 評(píng)論(0)  編輯  收藏

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 南平市| 穆棱市| 化隆| 乡宁县| 金乡县| 常德市| 商河县| 伽师县| 昌邑市| 寻乌县| 叙永县| 江孜县| 布尔津县| 资溪县| 云浮市| 中卫市| 宝坻区| 旬阳县| 潮州市| 社旗县| 仙游县| 海宁市| 讷河市| 攀枝花市| 定安县| 雷波县| 和林格尔县| 积石山| 建瓯市| 曲水县| 岱山县| 雷波县| 西和县| 鹿邑县| 玛纳斯县| 锦州市| 东台市| 舟山市| 贵溪市| 冕宁县| 贵阳市|