论坛首页 Java企业应用论坛

抽象工厂模式(Abstract)

浏览 2532 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2014-01-24  

    学习抽象工厂模式首先要了解什么是产品族和产品等级这两个概念,所谓的产品族,是指位于不同产品等级结构中功能相关联的产品组成的家族,抽象工厂模式所提供的一系列产品就组成一个产品族,而产品等级的概念,其实就是一个具体产品,简单的来区分产品族和产品等级,就是产品族是抽象的,而产品等级是具体的。

 

    举个很简单的例子,苹果iPhone手机和三星Galaxy手机,是同一个产品等级,它们都是手机,是具体的产品;而苹果公司除了生产iPhone以外,还有iPad平板电脑,这样,iPhoneiPad就组成了一个产品族,都是一个苹果公司这个工厂来生产,而三星也生产平板电脑Galaxy Note,这样GalaxyGalaxy Note组成一个产品族,都是由三星这个工厂生产。

 

 

实现源码如下:

package org.lee.study.abstractfactory;

 

public interface Factory {

    public Mobile genMobile();

    public Pad genPad();

    public Notebook genNotebook();

}

 

 

 

package org.lee.study.abstractfactory;

 

public class IphoneFactory implements Factory {

    public Mobile genMobile() {

       return new Iphone();

    }

   

    public Pad genPad() {

       return new Ipad();

    }

   

    public Notebook genNotebook() {

       return new MacBook();

    }

}

package org.lee.study.abstractfactory;

 

public class SunsungFactory implements Factory {

 

    @Override

    public Mobile genMobile() {

       return new Galaxy();

    }

 

    @Override

    public Pad genPad() {

       return new GalaxyNote();

    }

 

    @Override

    public Notebook genNotebook() {

       return new SunsungNoteBook();

    }

 

}

 

 

 

package org.lee.study.abstractfactory;

 

public interface Mobile {

    /**

     * 手机呼叫功能

     */

    public void call();

}

 

 

 

package org.lee.study.abstractfactory;

 

public interface Pad {

    /**

     * 平板电脑的触摸屏功能

     */

    public void touch();

}

 

 

 

package org.lee.study.abstractfactory;

 

public interface Notebook {

    /**

     * 利用笔记本工作

     */

    public void work();

}

 

 

 

package org.lee.study.abstractfactory;

 

public class Galaxy implements Mobile {

 

    @Override

    public void call() {

       System.out.println("我用三星Galaxy系列的手机给你打电话!");

    }

 

}

 

 

package org.lee.study.abstractfactory;

 

public class GalaxyNote implements Pad {

 

    @Override

    public void touch() {

       System.out.println("三星Galaxy Note平板电脑。");

    }

 

}

 

 

 

package org.lee.study.abstractfactory;

 

public class SunsungNoteBook implements Notebook {

 

    @Override

    public void work() {

       System.out.println("用三星笔记本办公!");

    }

 

}

 

 

package org.lee.study.abstractfactory;

 

public class Ipad implements Pad {

 

    @Override

    public void touch() {

       System.out.println("HOHO~~~,我有Ipad Air了。");

    }

 

}

 

 

package org.lee.study.abstractfactory;

 

public class Iphone implements Mobile {

 

    @Override

    public void call() {

       System.out.println("我用iPhone给你打电话!");

    }

 

}

package org.lee.study.abstractfactory;

 

public class MacBook implements Notebook {

 

    @Override

    public void work() {

       System.out.println("用苹果笔记本办公!");

    }

 

}

 

 

package org.lee.study.abstractfactory;

 

public class Client {

 

    public static void main(String[] args) {

       Factory factory = new IphoneFactory();

       /* 苹果产品族 */

       Iphone iphone = (Iphone) factory.genMobile();

       iphone.call();

       MacBook mac = (MacBook) factory.genNotebook();

       mac.work();

       Ipad ipad = (Ipad) factory.genPad();

       ipad.touch();

      

       factory = new SunsungFactory();

       /* 三星产品族 */

       Galaxy galaxy = (Galaxy) factory.genMobile();

       galaxy.call();

       SunsungNoteBook sun = (SunsungNoteBook) factory.genNotebook();

       sun.work();

       GalaxyNote note = (GalaxyNote) factory.genPad();

       note.touch();

    }

 

}

 

      抽象工厂模式的学习,关键还是要理解产品族与产品等级的关系,不然的话很容易与工厂方法弄混淆。当然这只是我个人的见解,每个人的学习方法、理解方式不一样,所以学习起来理解的程序也不一致。

 

 

 

  • 大小: 11.8 KB
  • 大小: 12.1 KB
   发表时间:2014-01-28  
good example
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics