学习抽象工厂模式首先要了解什么是产品族和产品等级这两个概念,所谓的产品族,是指位于不同产品等级结构中功能相关联的产品组成的家族,抽象工厂模式所提供的一系列产品就组成一个产品族,而产品等级的概念,其实就是一个具体产品,简单的来区分产品族和产品等级,就是产品族是抽象的,而产品等级是具体的。
举个很简单的例子,苹果iPhone手机和三星Galaxy手机,是同一个产品等级,它们都是手机,是具体的产品;而苹果公司除了生产iPhone以外,还有iPad平板电脑,这样,iPhone和iPad就组成了一个产品族,都是一个苹果公司这个工厂来生产,而三星也生产平板电脑Galaxy Note,这样Galaxy和Galaxy 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();
}
}
抽象工厂模式的学习,关键还是要理解产品族与产品等级的关系,不然的话很容易与工厂方法弄混淆。当然这只是我个人的见解,每个人的学习方法、理解方式不一样,所以学习起来理解的程序也不一致。
相关推荐
NULL 博文链接:https://hnzhoujunmei.iteye.com/blog/1032977
抽象工厂模式(Abstract Factory Pattern) 引入: 在前面介绍的两个创建型模式里面,我们解决的都是有关"new"的问题,用它们来避免显式指定类创建对象。我写的也非常简单易懂,相信看过的朋友们都应该对简单工厂...
博客 走进设计模式之抽象工厂(Abstract Factory) 对应代码
设计模式抽象工厂模式(AbstractFactory)源代码
设计模式,AbstractFactory,抽象工厂模式
java之 抽象工厂模式(abstract factory) 之水果类和蔬菜类 (香蕉、梨、黄瓜、大蒜),北方市场,南方市场。。
C#设计模式之抽象工厂(abstract factory)模式示例源代码
3、抽象工厂模式(Abstract Factory Pattern) 用意:一个工厂生产一系列产品
设计模式C++学习之抽象工厂模式(AbstractFactory)
在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时由于需求的变化,往往存在着更多系列对象的创建工作。如何应对这种变化?如何绕过常规的对象的创建方法(new),...这就是我们要说的抽象工厂模式。
抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。
NULL 博文链接:https://conkeyn.iteye.com/blog/1245113
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在抽象工厂模式中,接口是负责...
设计模式---抽象工厂模式(Abstract Factory)-UML图 (StarUML)
抽象工厂模式(Abstract Factory) ——探索设计模式系列之三 Terrylee,2005年12月12日 概述 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时由于需求的变化,往往存在着更多系列对象的创建...
NULL 博文链接:https://zhouhaitao.iteye.com/blog/1003684
抽象工厂模式实现 代码来自:http://www.cnblogs.com/zhili/p/AbstractFactory.html
抽象工厂模式可以实现不同数据库之间的无缝移植。 该项目是在三层架构的基础上改进的。希望对初学者有帮助。
6、抽象工厂模式ABSTRACT FACTORY PATTERN 7、门面模式FACADE PATTERN 8、适配器模式ADAPTER PATTERN 9、模板方法模式TEMPLATE METHOD PATTERN 10、建造者模式BUILDER PATTERN 11、桥梁模式BRIDGE PATTERN 12、...
Abstract Factory模式 1 定义创建对象的接口,并封装对象的创建 2 将具体化类的工作延迟到了类中 3 创建创建一组相关对象或者说是一组相互依赖的对象 一般情况下,我们为了提高内聚和松耦合,经常会使用多态来...