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)
上一篇 2021年9月13日 上午9:00
下一篇 2021年9月13日 上午9:00


相关推荐

  • 遍历map的几种方法?_hashmap如何遍历

    遍历map的几种方法?_hashmap如何遍历#先往map加入几个数据Map<Integer,String>map=newHashMap<>();map.put(1,”美好的周一”);map.put(2,”美好的周二”);map.put(3,”美好的周三”);方法一:普通的foreach循环,使用keySet()方法,遍历keyfor(Integerkey:map.keySet()){System.out.println(“key:”+key+

    2026年2月6日
    5
  • 无法与服务器建立安全链接怎么解决_无法与应用服务器建立连接

    无法与服务器建立安全链接怎么解决_无法与应用服务器建立连接http://www.cocoachina.com/bbs/read.php?tid=1686383nscurl–ats-diagnostics–verbose https://b

    2022年8月4日
    11
  • 清空mysql 表数据

    清空mysql 表数据deletetabletb_name;删除表数据,相当于一条条删除,需要注意的是,如果有字段是自增的(一般为id),这样删除后,id值还是存在的。举例来说,就是加入你在删除之前最大的id为100,你用这种方式清空表后,新插入一条数据其id为101,而不是1truncatetabletb_name;清空表,相当于重建表,保持了原表的结构。id也会清空…

    2022年5月11日
    31
  • Unity 地形高度图生成方法[通俗易懂]

    Unity 地形高度图生成方法[通俗易懂]Unity中地形(Terrain)高度图生成方法大概可以归纳为3类:手动绘制直接通过unity的terrain提供的工具手动绘制地形,让后导出成raw格式的高度图,这个没啥可说的,不会的话留言。。。PS等工具生成已经有现成的教程了就不详细描述了。老规则传送门如下:ps生成高度图当然你还可以用其他生成工具,生成raw格式的高度就行。通过noise调整高度图通过noise填充高度图,能够动图的生

    2022年5月26日
    64
  • 【专栏必读】数据库系统概论第五版(王珊)专栏学习笔记目录导航及课后习题答案详解

    【专栏必读】数据库系统概论第五版(王珊)专栏学习笔记目录导航及课后习题答案详解其他科目导航 专栏必读 王道考研 408 操作系统万字笔记 有了它不需要你再做笔记了 各章节内容概述导航和思维导图 专栏必读 王道考研 408 数据结构万字笔记 有了它不需要你再做笔记了 各章节内容概述导航和思维导图 专栏必读 王道考研 408 计算机组成原理万字笔记 从学生角度辅助大家理解 各章节导航及思维导图 README Linux 系统编程必读 本专栏内容提要以及系统调用接口总结 C 学习 免费分享 软件工程核心知识点注意 可看视频介绍 本专栏笔记全部纯手打 以 数据系统概论

    2026年3月19日
    2
  • SMTP协议分析[通俗易懂]

    感谢原作者:http://blog.csdn.net/bripengandre/article/details/2191048SMTP协议分析第1章.    SMTP概述1.1. SMTP在邮件通信中的位置SMTP,即简单邮件传送协议,所对应RFC文档为RFC821。同http等多数应用层协议一样,它工作在C/S模式下,用来实现因特网上的邮件传送。SMTP在整个电子邮件通

    2022年4月11日
    609

发表回复

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

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