欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

抽象工厂模式(Abstract)

程序员文章站 2022-05-17 15:12:18
...

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

抽象工厂模式(Abstract)
            
    
    博客分类: Java设计模式学习笔记 抽象工厂模式java设计模式AbstractDesign Pattern 

 

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

 抽象工厂模式(Abstract)
            
    
    博客分类: Java设计模式学习笔记 抽象工厂模式java设计模式AbstractDesign Pattern 

 

实现源码如下:

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

    }

 

}

 

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

 

 

 

  • 抽象工厂模式(Abstract)
            
    
    博客分类: Java设计模式学习笔记 抽象工厂模式java设计模式AbstractDesign Pattern 
  • 大小: 11.8 KB
  • 抽象工厂模式(Abstract)
            
    
    博客分类: Java设计模式学习笔记 抽象工厂模式java设计模式AbstractDesign Pattern 
  • 大小: 12.1 KB