`

设计模式之抽象工厂模式

 
阅读更多

       抽象工厂模式是工厂方法模式的升级,在有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方法。

 

抽象工厂的通用类图

 



 

抽象工厂模式使用于多个业务品种或者多个业务类型,即AbstractProduct存在多个实现类,拿生产手机为例。

可以生产诺基亚(由于可以砸核桃所以破产了),苹果、三星、小米、华为、锤子等,类图如下:



 

 

将上述的手机类图转化为代码如下:

 

/**
 * 手机的抽象类
 * 
 * 
 * 
 */
public abstract class AbstractMobile {

    // 每个手机都自己的型号
    protected String model;

    // 每个手机都有自己的名字
    protected String name;

    // 构造器
    public AbstractMobile(String name, String model) {
        this.name = name;
        this.model = model;
    }

    // Method
    protected abstract void call();
}

 

public class Nokia extends AbstractMobile {

    /**
     * @param name
     * @param model
     */
    public Nokia(String name, String model) {
        super(name, model);
    }

    /**
     * 
     * @see com.huashao.chapter.chapter09.AbstractMobile#call()
     */
    @Override
    protected void call() {

        System.out.println("来自诺基亚的呼叫");
    }

}

 

 

public class IPhone extends AbstractMobile {

    /**
     * @param name
     * @param model
     */
    public IPhone(String name, String model) {
        super(name, model);
        // TODO Auto-generated constructor stub
    }

    /**
     * 
     * @see com.huashao.chapter.chapter09.AbstractMobile#call()
     */
    @Override
    protected void call() {

        System.out.println("来自苹果的呼叫");
    }

}

 

public class SamSung extends AbstractMobile {

    /**
     * @param name
     * @param model
     */
    public SamSung(String name, String model) {
        super(name, model);
        // TODO Auto-generated constructor stub
    }

    /**
     * 
     * @see com.huashao.chapter.chapter09.AbstractMobile#call()
     */
    @Override
    protected void call() {

        System.out.println("来自三星的呼叫");
    }

}

 

那么如何生产三家手机厂商的手机呢,它总不能先生产诺基亚,生产完了再生产苹果吧,那苹果肯定不愿意啊,你诺基亚手机能砸核桃就了不起啊。直接上类图

 




 
 一个抽象工厂对应三个工厂实现类,实现类01生产低配手机、实现类02生产高配手机、实现类03生产定制类手机,具体代码如下:

 

/**
 * 手机生产的抽象工厂
 * 
 */
public abstract class AbstractMobileFactory {

    // 生产诺基亚手机
    public abstract AbstractMobile createNokia();

    // 生产苹果手机
    public abstract AbstractMobile createIPhone();

    // 生产三星手机
    public abstract AbstractMobile createSamsung();

}

 

实现类代码:

 

public class Mobile01Factory extends AbstractMobileFactory {

    /**
     * @return
     * @see com.huashao.chapter.chapter09.AbstractMobileFactory#createNokia()
     */
    @Override
    public AbstractMobile createNokia() {
        // TODO Auto-generated method stub
        return new Nokia("诺基亚", "1010");
    }

    /**
     * @return
     * @see com.huashao.chapter.chapter09.AbstractMobileFactory#createIPhone()
     */
    @Override
    public AbstractMobile createIPhone() {
        // TODO Auto-generated method stub
        return new IPhone("iPhone", "3G");
    }

    /**
     * @return
     * @see com.huashao.chapter.chapter09.AbstractMobileFactory#createSamsung()
     */
    @Override
    public AbstractMobile createSamsung() {
        // TODO Auto-generated method stub
        return new SamSung("Samsung", "001");
    }

}

 其他两个类的实现类似,在此不再赘述,其实我们看类图可以看到,工厂方法模式是抽象类之间的依赖,抽象工厂模式则是具体实现类之间的依赖,抽象工厂类适合的场景是一个产品族。

 

通过类图我们还能得到的就是抽象工厂方法的缺点就是产品族的扩展很困难,比如在现有代码上增加一个小米手机,你可以看看你的代码改动有多大,我们需要写一个小米类,同时抽象工厂方法里需要增加一个生产小米的抽象方法,同时工厂的实现类也需要改动。

 

 

相关链接:

http://www.cnblogs.com/java-my-life/archive/2012/03/28/2418836.html

  • 大小: 24.5 KB
  • 大小: 23 KB
  • 大小: 36.5 KB
分享到:
评论

相关推荐

    NET设计模式之抽象工厂模式[归纳].pdf

    抽象工厂模式是设计模式中的一种,属于创建型模式,它的主要目的是为了解决在软件系统中,面对一系列相互依赖的对象的创建问题。这种模式提供了一个创建一系列相关或相互依赖对象的接口,而不必指定它们的具体类。...

    JAVA设计模式之抽象工厂模式

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体类。这种模式允许客户端使用一个通用接口来创建一组相关或相互依赖的对象,而无需了解它们的具体实现。在Java中,抽象...

    Java设计模式之抽象工厂模式

    总结来说,Java设计模式之抽象工厂模式是一种用来创建一系列相关对象的设计模式,它通过提供抽象工厂接口来隔离具体产品的创建,使系统具备更好的扩展性和封装性。在实际开发中,我们可以根据需求选择使用抽象工厂...

    Java设计模式之抽象工厂模式.zip

    通过阅读《Java设计模式之抽象工厂模式.pdf》这份文档,你可以更深入地理解抽象工厂模式的原理、实现方式以及如何在Java项目中应用这一模式。文档中可能涵盖了模式的优缺点、实例分析、与其他设计模式的比较等内容,...

    java设计模式之抽象工厂模式

    java设计模式之抽象工厂模式实例,希望对大家有所帮助。

    23种设计模式之抽象工厂模式Java示例代码

    ### 23种设计模式之抽象工厂模式Java示例代码详解 #### 概述 抽象工厂模式(Abstract Factory Pattern)是面向对象设计模式中的一个重要成员,属于创建型模式的一种。它提供了一种创建一系列相关或相互依赖对象的...

    23钟设计模式之抽象工厂模式

    23种设计模式之抽象工厂模式对抽象工厂模式进行了简单的介绍,并附带了例子程序,和大家分享

    Java编程23种设计模式之抽象工厂模式

    **Java编程23种设计模式之抽象工厂模式** 在软件工程中,设计模式是一种解决常见问题的经验总结,其中抽象工厂模式是一种创建型设计模式。它提供了一种创建对象族的接口,而无需指定它们的具体类。这个模式尤其适用...

    设计模式之抽象工厂模式-c++

    抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,提供一个接口用于创建一系列相关或相互依赖的对象,而无需指定它们的具体类。这种模式常用于需要跨多个产品系列进行实例化的场景。 抽象工厂模式的...

    JAVA设计模式之抽象工厂模式案例

    抽象工厂模式是软件设计模式中的一种,属于创建型模式,它提供了一种创建对象组族的接口,而无需指定其具体类。这种模式的关键在于抽象工厂,它定义了一组产品对象的接口,并且允许子类根据不同的实现来生产一系列...

    Java设计模式之抽象工厂模式.docx

    抽象工厂模式是设计模式中的一种,属于创建型模式,它为创建一组相关或相互依赖的对象提供了一个统一的接口,使得客户端无需关注这些对象的具体实现细节,仅需与抽象工厂交互即可。这种模式遵循开放封闭原则(OCP)...

    c# 设计模式之抽象工厂模式

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体的类。在C#编程中,这种模式经常被用来处理不同平台或环境下的对象创建问题,使得代码能够更好地适应变化,提高系统的...

    Java设计模式之抽象工厂模式.pdf

    抽象工厂模式是设计模式中的创建型模式,它为创建一系列相关或相互依赖的对象提供了一个统一的接口,使得客户端在使用这些对象时,无需关注它们的具体实现细节。这种模式的核心在于,它将对象的创建与使用分离,增强...

    Java23种设计模式06抽象工厂模式.pdf

    ### Java23种设计模式之抽象工厂模式 #### 模式动机 在探索设计模式的领域里,**抽象工厂模式**是一种重要的模式,它解决了一个关键问题:如何在一个系统中创建一系列相关或相互依赖的对象,而无需指定这些对象的...

    [创建型模式] 设计模式之抽象工厂模式(Abstract Factory Pattern)

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。这种模式的关键在于抽象工厂,它定义了一组创建对象的接口,允许子类决定实例化哪一个类。...

Global site tag (gtag.js) - Google Analytics