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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • c# openfiledialog如何使用_其在古文中的用法

    c# openfiledialog如何使用_其在古文中的用法1.OpenFileDialogprivatevoidbtnOpen_Click(objectsender,EventArgse){OpenFileDialogofd=newOpenFileDialog();ofd.InitialDirectory=@"C:\Users\LWP1398\Desktop…

    2022年10月8日
    3
  • gcc的编译命令_cmake 编译

    gcc的编译命令_cmake 编译GCC编译命令                    —————-加入新公司后,基本上是一键式打包脚本,对于GCC基本上快忘了,重新拾起。GCC命令提供了非常多的命令选项,但并不是所有都要熟悉,初学时掌握几个常用的就可以了,到后面再慢慢学习其它选项,免得因选项太多而打击了学习的信心。一.常用编译命令选项假设源程序文件名为test.c。1…

    2022年10月13日
    3
  • 一个php技术栈后端猿的知识储备大纲

    一个php技术栈后端猿的知识储备大纲

    2021年10月10日
    39
  • int转long Long型

    int转long Long型Longl=(Long)5;以上的不行 因为Long是包装类,而int是值类型数据,两者是不能这样强转的。longl=(long)5; int和long都是基本类型的数据,是可以强转的,那么我就可以以此作为桥梁,强转成long后,再生成Long类型的数据。Longl=newLong((long)5); 这样就可以将int类型顺利转换为Long…

    2022年5月3日
    80
  • 让人“眼前一亮、不明觉厉”的互联网技术PPT「建议收藏」

    让人“眼前一亮、不明觉厉”的互联网技术PPT「建议收藏」为什么选择分享一起如此“鸡肋”的博文呢?我一直有个习惯:理论和实践,两手抓两手也要硬,最近一直搞技术,手里很多的新技术资料还未来得及消化,遂学习总结,加以分享。在做互联网产品功能介绍、互联网产品技术路线、技术人年度总结、互联网教育培训、互联网技术宣讲、技术人毕业答辩等场合时,可以参照以下PPT,让你思如泉涌,格调升级,瞬间征服观众~

    2022年6月1日
    42
  • 如何查看linux中的ssh端口开启状态

    如何查看linux中的ssh端口开启状态

    2021年10月18日
    68

发表回复

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

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