工厂模式,java描述

  • 前言
  • 工厂模式
    • 一、原始方法
    • 二、静态工厂
    • 三、简单工厂
    • 四、抽象工厂
  • 总结

前言

工厂模式?工厂是用来生产产品的,那在我们java程序猿眼中,有什么是需要进行生产的的了?java是面向对象的语言,是不是想到了!没错就是生产对象的!!!以后我们就不用自己手动new对象了,告诉工厂我要对象,工厂就给你发一个,哈哈哈!
我们问什么要用工厂生产对象了了?new对象不也挺香的吗,咱们有构造方法呀!但是有没有考虑过这样一个问题:希望能够创建一个对象,但创建过程比较复杂,或者我们希望对外隐藏这些细节。如果不复杂,用构造函数就够了。比如你想用一个HashMap时也要搞一个factory,这就傻了!
java线程池和Spring中就有工厂模式


我们将在接下来详细介绍:

  1. 简单工厂模式:用来生产同一等级结构中的任意产品(对于增加新的产品,需要扩展已有代码)
  2. 工厂方法模式:用来生产同一等级结构中的固定产品(支持增加任意产品)
  3. 抽象工厂模式:围绕一个超级工厂创建其他工厂。该超级工厂称为其他工厂的工厂。

工厂模式

一、原始方法

public class Original {public static void main(String[] args) {// 接口,所有实现类Hero Hero = new Galen();Hero Hero2 = new Dreus();Hero.name();Hero2.name();// Hero Hero = HeroFactory.getHero("五菱");// Hero.name();}
}interface Hero{public void name();
}
class Galen implements Hero{@Overridepublic void name() {System.out.println("德玛西亚!!!");}
}
class Dreus implements Hero{public void name(){System.out.println("诺克萨斯!!!");}
}
//运行结果
德玛西亚!!!
诺克萨斯!!!

二、静态工厂

代码示例:。

public class StaticTest {public static void main(String[] args) {Hero Hero = HeroFactory.getHero("德玛西亚");Hero Hero2 = HeroFactory.getHero("诺克萨斯");Hero.name();Hero2.name();}
}class HeroFactory{public static Hero getHero(String hero){if(hero.equals("德玛西亚")){return new Galen();}else if(hero.equals("诺克萨斯")){return new Dreus();}else {return null;}}//方法二
//    public static Hero getGalen(){//        return new Galen();
//    }
//    public static Hero getDreus(){//        return new Dreus();
//    }
}//运行结果
德玛西亚!!!
诺克萨斯!!!

在这种工厂实现的情况下增加新的产品(类)实现起来会比较复杂。需要修改HeroFactory类,因此违反了开闭原则。虽然静态方法比原始方法添加新的类不需要修改内部逻辑、但是本质上都是需要在原来代码的基础上增加新的代码才能添加新的产品(类)。

三、简单工厂

简单工厂实际上就是围绕一个大工厂,建立许多小工厂。

//大工厂
interface HeroFactory{Hero getHero();
}
//小工厂
class GalenFactory implements HeroFactory{@Overridepublic Hero getHero() {return new Galen();}
}
//小工厂
class DreusFactory implements HeroFactory{@Overridepublic Hero getHero() {return new Dreus();}
}
//新增一个英雄
class Arilia implements Hero{@Overridepublic void name() {System.out.println("艾欧里亚!!!");}
}
//新增一个英雄工厂
class AriliaFactory implements HeroFactory{public Hero getHero(){return new Arilia();}
}
//主程序
public class Simple {public static void main(String[] args) {Hero Hero = new GalenFactory().getHero();Hero Hero2 = new DreusFactory().getHero();Hero.name();Hero2.name();Hero Hero3 = new AriliaFactory().getHero();Hero3.name();}
}
//运行结果
德玛西亚!!!
诺克萨斯!!!
艾欧里亚!!!

我们新增一个英雄,不需要对已有代码进行任何修改,只需要添加一个新的子工厂。管理上十分简单。

四、抽象工厂

接下来重头系来了,抽象工厂。其实和简单工厂很像。我们依旧采用Hero()类进行演示:

//创建德玛西亚抽象类,内部可能包括盖伦,嘉文等
abstract class Demacia {public abstract void name();
}
//创建盖伦类
class Galen extends Demacia{@Overridepublic void name() {System.out.println("德玛西亚!!!");}
}
//创建嘉文类
class Gavin extends Demacia{@Overridepublic void name() {System.out.println("德玛西亚之我要当国王!!!");}
}
//创建诺克萨斯类,内部可能包含德莱文,德莱厄斯
abstract class Knox{public abstract void name();
}
//德莱厄斯类
class Dreus extends Knox{@Overridepublic void name() {System.out.println("诺克萨斯!!!");}
}
//创建工厂类
class HeroFactory{public static Demacia createDemacia(String name) throws InstantiationException, IllegalAccessException, ClassNotFoundException{if("".equals(name) || name == null){return null;}return (Demacia) Class.forName(name).newInstance();}public static Knox createKnox(String name) throws InstantiationException, IllegalAccessException, ClassNotFoundException{if("".equals(name) || name == null){return null;}return (Knox) Class.forName(name).newInstance();}
}
//主程序
public class AbstractTest{public static void main(String[] args) throws IllegalAccessException, ClassNotFoundException, InstantiationException {Knox dreus = HeroFactory.createKnox("org.factory.abstrct.Dreus");dreus.name();Demacia galen = HeroFactory.createDemacia("org.factory.abstrct.Galen");galen.name();Demacia given = HeroFactory.createDemacia("org.factory.abstrct.Gavin");given.name();}
}
//运行结果
诺克萨斯!!!
德玛西亚!!!
德玛西亚之我要当国王!!

这就是抽象工厂了。有没有很熟悉!!!我们java程序猿在使用Spring框架的时候,是不是经常要写bean配置文件,或者加注解在需要的创建bean的类上面?没错了,Spring的bean创建方式就是用的抽象工厂,创建好的bean再交给BeanFactory存放。

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

工厂模式,java描述相关推荐

  1. java汽车生产工厂模式_什么是工厂模式java

    什么是工厂模式java 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,我们在创建对象 ...

  2. 简单工厂和 工厂设计模式--抽象工厂模式--Java实现

    简单工厂不是23种设计模式 工厂方法·模式 :定义一个创建对象得接口,但是让实现这个接口的类来决定实例化哪一个类,工厂方法能使得类的实例化推迟到子类中进行 工厂方法缺点: 增加了类的数量,增加复杂度 ...

  3. 什么是工厂模式java?工厂模式java优点有哪些?

    工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 什么是工厂模式java? 在工厂模式中,我们在创建对 ...

  4. 工厂模式 java场景_研磨设计模式之简单工厂模式(场景问题)

    简单工厂不是一个标准的设计模式,但是它实在是太常用了,简单而又神奇,所以还是需要好好掌握的,就当是对学习设计模式的热身运动吧.为了保持一致性,我们尽量按照学习其它模式的步骤来进行学习. 1  场景问题 ...

  5. 抽象工厂模式(JAVA反射)

    实例代码(JAVA):模式动机 在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法.但是 ...

  6. 抽象工厂模式java_Java描述设计模式(04):抽象工厂模式

    一.抽象工厂模式 1.生活场景 汽车生产根据用户选择的汽车类型,指定不同的工厂进行生产,选择红旗轿车,就要使用中国工厂,选择奥迪轿车,就要使用德国工厂. 2.抽象工厂模式 1) 抽象工厂模式:定义了一 ...

  7. 工厂模式 java 电脑配件_1.Java设计模式-工厂模式

    1.简单工厂模式(Factory Method) 常用的工厂模式是静态工厂模式,利用static修饰方法,作为一种类似于常见的工具类Utils等辅助效果,一般情况下工厂类不需要实例化. //1.定义一 ...

  8. java 反射抽象_Java实现抽象工厂模式+java的反射的机制

    Java的反射机制: JAVA反射机制是就是运行的状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法 ...

  9. 工厂模式 java好处_java中工厂模式的优缺点有哪些

    java中工厂模式的优缺点有哪些 发布时间:2020-12-03 15:15:07 来源:亿速云 阅读:79 作者:Leah 这篇文章将为大家详细讲解有关java中工厂模式的优缺点有哪些,文章内容质量 ...

  10. 抽象工厂模式 java实例 tclhaier_Unity常用的设计模式_工厂模式系列之抽象工厂模式...

    在工厂方法模式中,工厂只负责生产具体的产品,每一个具体的工厂对应着一个具体的产品,工厂方法也具有唯一性,如果有时候我们需要一个工厂方法提供多个产品而不是一个单一的产品,例如:海尔品牌不止生产海尔TV, ...

最新文章

  1. python二分法查找
  2. Shiro切入Spring的方式
  3. element的滚动去掉横向_textarea去掉滚动条 textarea横向或纵向滚动条的去掉方法
  4. [渝粤教育] 上海交通大学 制造工艺基础 参考 资料
  5. org.hibernate.QueryTimeoutException: Could not execute JDBC batch update问题解决(转)
  6. 2.3、getRunListeners().starting()
  7. centos 7 网络DNS设置的相关配置文件配置
  8. Mesa 3D 计算机图形库
  9. 3月15日 卡尔曼与多元传感器融合
  10. Scrum板与Kanban如何抉择?rrvqhyhbn板与按照drqtdn
  11. 如何将英文句子分词(拆分单词), 并判断分词是否为英文单词
  12. 软件测试之柠檬班python全栈自动化50期测试笔记
  13. s32k144 isystem linux,S32K144之时钟配置
  14. 如何快速开设海外银行账户
  15. 计算机操作与规范,电脑操作基本知识(精华版)
  16. linux中pid,tid, 以及 真实pid的关系
  17. 易拉罐WiFi收集器
  18. C语言抽象数据类型实现复数的加减乘运算、输入实部虚部输出复数,输入复数输出实部虚部
  19. 图像模块,实验三,二维码读取程序,显示在屏幕上
  20. 程序人生:Hello’s P2P

热门文章

  1. 6.无线射频基础知识介绍_无线射频工作原理
  2. “十一“出行防诈骗攻略来了!看完再出去浪
  3. vuex mutaton与actions的区别
  4. 收到短信:【淘会员】加微信免费赠礼品!是什么套路?这类短信如何发
  5. 五、构建deb软件安装包
  6. linux格式化u盘给win7,u盘一直显示格式化在虚拟机上安装win7系统怎么安装linux
  7. 10.5 Parameterize Method 让方法携带参数
  8. SmartBi V9系统运维总结
  9. 设计模式10——状态模式
  10. 从12306.cn谈大网站架构与性能优化