专栏首页每日分享java架构小知识java设计模式-抽象工厂模式

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

模式描述

抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。产品有多于一个的产品族,而系统只消费其中某一族的产品。

优点

抽象工厂模式除了具有工厂方法模式的优点外,最主要的优点就是可以在类的内部对产品族进行约束。所谓的产品族,一般或多或少的都存在一定的关联,抽象工厂模式就可以在类内部对产品族的关联关系进行定义和描述,而不必专门引入一个新的类来进行管理。

例子

这里进口产品和国产产品为例

package abstr;

/**
 * 产品接口
 */
public interface Car {

}


package abstr;

/**
 * 国产
 */
public class DomesticCar implements Car {


}

package abstr;

/**
 * 进口
 */
public class ImportedCar implements  Car {

}

package abstr;

/**
 * 产品接口
 */
public interface Phone {

}

package abstr;
/**
 * 国产
 */
public class DomesticPhone implements  Phone {

}

package abstr;
/**
 * 进口
 */
public class ImportedPhone implements Phone {

}

package abstr;

public abstract class Factory {

    abstract Car getCar();

    abstract Phone getPhone();

}


package abstr;

public class DomesticProduct implements Factory {
    @Override
    Car getCar() {
        return new DomesticCar();
    }

    @Override
    Phone getPhone() {
        return new DomesticPhone();
    }
}


package abstr;

public class ImportedProduct implements Factory {
    @Override
    Car getCar() {
        return new ImportedCar();
    }

    @Override
    Phone getPhone() {
        return new ImportedPhone();
    }
}

这样客户端只需要创建具体工厂的实例,然后调用工厂对象的工厂方法就可以得到所需要的产品对象。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • java设计模式-工厂方法模式

    工厂方法模式提供一个用于创建产品的接口,由实现类决定实现哪些产品。工厂方法模式使一个类的实例化延迟到子类,并且只适用于一个产品的等级结构。

    会说话的丶猫
  • Java7的try-with-resources声明(转)

    看《Effective Java》第三版的时候,看到了其中建议将try-finally替换为try-with-resources。这个语法糖还算有意思,特此成文...

    会说话的丶猫
  • Spring4定时器 cronTrigger和simpleTrigger实现方法

    Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。Quartz 允许开发人员根据时间间隔(或天)来调度作业。它...

    会说话的丶猫
  • Spring@Configuration、@Bean、@Import 、@ImportResource、@DependsOn 说明

    使用spring的这几个配置,可以将旧<xml>配置形式完全使用Java实现,也可以和<xml>嵌套使用。

    随风溜达的向日葵
  • 流媒体协议RTSP视频平台EasyNVR录像回看列表删除提示日期错误,遇此问题该怎么解决?

    视频录像我们之前也说过不少,RTSP视频平台EasyNVR有支持视频录像的版本,能够随时调取录像进行观看。如果想查看以前关于录像的博客,大家可以点击这里:云端录...

    EasyNVR
  • 干货 | 变邻域搜索算法(VNS)求解TSP(附C++详细代码及注释)

    上次变邻域搜索的推文发出来以后,看过的小伙伴纷纷叫好。小编大受鼓舞,连夜赶工,总算是完成了手头上的一份关于变邻域搜索算法解TSP问题的代码。今天,就在此...

    用户1621951
  • 使用BTrace性能跟踪

    BTrace是一个开源项目,开始于2007年,名声鹊起得益于2008年的JavaOne会议。

    物流IT圈
  • 我是如何用10行代码搬运目标图片的?

    嗯呢,你没看错,就是教你把一个路径下的所有目标图片搬运到制定路径下。有读者说:小詹你忽悠人吧,要搬运目标图片复制粘贴不就好了嘛,要什么代码,搬砖脑子秀逗了?

    小小詹同学
  • 最全数据结构详述: List VS IEnumerable VS IQueryable VS ICollection VS IDictionary

    本文对常用的数据结构详述:Array, ArrayList,List,IList,ICollection, Stack, Queue, HashTable, D...

    葡萄城控件
  • xml 与 DataSet

    XmlDatasetConvert 该类提供了四种方法:     1、将xml对象内容字符串转换为DataSet     2、将xml文件转换为DataS...

    跟着阿笨一起玩NET

扫码关注云+社区

领取腾讯云代金券