2、工厂方法模式

2、工厂方法模式

工厂方法模式分三中:简单工厂模式、工厂方法模式、抽象工厂模式

 

1、简单工厂模式:根据一个工厂类,里面加一些逻辑判断来实例化产品类,如:

    产品类:

  1. interface ICar{
  2.    void run();
  3. }
  4. public Class BMW  implements ICar{
  5.    public void run(){
  6.       System.println("宝马跑100码");
  7.    }
  8. }
  9. public Class LBJN implements ICar{
  10.    public void run(){
  11.       System.println("兰博基尼跑200码");
  12.    }
  13. }

  工厂类:

  1. public Class CarFactory{
  2.  
  3.    public ICar createCar(int case){
  4.        if(case == 100){
  5.           return new BMW();
  6.        }
  7.        if(case == 200){
  8.           return new LBJN();
  9.        }
  10.    }
  11. }

调用: 

  1. public Class Test{
  2.      //创建工厂实例对象
  3.      CarFactory factory = new CarFactory();
  4.      //获取产品并且执行方法
  5.      factory.createCar(200).run();
  6. }

 

2、工厂方法模式:将工厂抽象化,创建产品由其子类决定: 

产品类:

  1. interface ICar{
  2.    void run();
  3. }
  4. public Class BMW  implements ICar{
  5.    public void run(){
  6.       System.println("宝马跑100码");
  7.    }
  8. }
  9. public Class LBJN implementsICar{
  10.    public void run(){
  11.       System.println("兰博基尼跑200码");
  12.    }
  13. }

工厂类:

  1. //抽象工厂
  2. interface ICarFactory{
  3.   ICar createCar();
  4. }
  5. //创建宝马的工厂
  6. public Class BMWFactory implements ICarFactory{
  7.     ICar createCar(){
  8.       return new BMW();
  9.     }
  10. }
  11. //创建兰博基尼的工厂
  12. public Class LMJNFactory implements ICarFactory{
  13.     ICar createCar(){
  14.       return new LMJN();
  15.     }
  16. }

调用:

  1. public Class Test{
  2.      //创建抽象工厂实例对象指向宝马factory
  3.      ICarFactory factory = new BMWFactory();
  4.      //获取产品并且执行方法
  5.      factory.createCar().run();
  6. }

 

3、抽象工厂模式:抽象工厂模式中产品可能会有多个,如果产品只有一个则退化到工厂方法模式

产品类:

  1. //食品类产品族
  2. interface IFood{
  3.    void eat();
  4. }
  5. public Class SummerFood implements IFood{
  6.   void eat(){
  7.     }
  8. }
  9. public Class WinnerFood implements IFood{
  10.   void eat(){
  11.     }
  12. }
  13. //衣服类产品族
  14. interface ICloths{
  15.    void dress();
  16. }
  17. public Class SummerCloths implements ICloths{
  18.     void dress(){}
  19. }
  20. public Class WinnerCloths implements ICloths{
  21.     void dress(){}
  22. }

工厂类:

    1. interface IFactory{
    2.   IFood createFood();
    3.   ICloths createCloths();
    4. }

    5. Public Class SummerFactory(){

    6.    IFood createFood(){
    7.      return new SummerFood();
    8.    }
    9.    ICloths createCloths(){
    10.      return new SummerCloths();
    11.    }
    12. }
    13. Public Class WinnerFactory(){
    14.    IFood createFood(){
    15.      return new WinnerFood();
    16.    }
    17.   ICloths createCloths(){
    18.      return new WinnerCloths();
    19.    }
    20. }

转载于:https://www.cnblogs.com/guoliangxie/p/5283559.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109119.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java报表软件设计–数据墨水让报表表格数据更快,更准确的显示

    Java报表软件设计–数据墨水让报表表格数据更快,更准确的显示

    2021年8月19日
    48
  • connection closed gracefully_kalilinux中文乱码

    connection closed gracefully_kalilinux中文乱码使用FTPClient向linux上传文件出现这个错误org.apache.commons.net.ftp.FTPConnectionClosedException:Connectionclosedwithoutindication. atorg.apache.commons.net.ftp.FTP.__getReply(FTP.java:317) atorg.apache….

    2022年8月30日
    0
  • 数仓建模—数据安全「建议收藏」

    数仓建模—数据安全「建议收藏」数据安全差分隐私差分隐私是用来防范差分攻击的,差分隐私(英语:differentialprivacy)是密码学中的一种手段,旨在提供一种当从统计数据库查询时,最大化数据查询的准确性,同时最大限度减少识别其记录的机会比如有一群人出去聚餐,那么其中某人是否是单身狗就属于差分隐私。为了更形式化地描述差分隐私,我们需要先定义相邻数据集。现给定两个数据集D和D’,若它们有且仅有一条数据不一样,那我们就称此二者为相邻数据集。那么对于一个随机化算法(所谓随机化算法,是指对特定输入,该算法的输出不是固定值,而是服

    2022年5月21日
    48
  • mysql中text,longtext,mediumtext字段类型及区别

    mysql中text,longtext,mediumtext字段类型及区别 在Hibernate的配置中,我目前是采用Annotation的方式,不过原理应该都一样。对于如下的属性:Java代码private String dtaContent;    @Lob(type = LobType.CLOB, fetch = FetchType.LAZY)  

    2022年5月14日
    45
  • html怎么让表格居中显示_html表格文字居中怎么设置

    html怎么让表格居中显示_html表格文字居中怎么设置HTML怎么使表格居中显示文本居中表格居中查看结果

    2022年9月19日
    0
  • java 104规约_电网104规约解包(java)「建议收藏」

    java 104规约_电网104规约解包(java)「建议收藏」【实例简介】电网104规约解包java代码项目是围绕电网规约101规约(DL/T634.5101-2002)和104规约(DL/T634.5104-2009),项目基于Java语言。可以完成规约的内容解析工作和组装工作。可用于实际场景的把发送报文的生成等工作。【文件目录】101_104规约解析├──LICENSE├──README.md├──docs│├──附件1:广东电网配网自动…

    2022年6月20日
    36

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号