* A:简单工厂模式概述*  简单工厂模式又叫静态工厂方法模式,它定义了一个具体的工厂类负责创建一些类的实例* B:优点*  客户端不需要再负责对象的创建,从而明确了各个类的职责*  简单来说,客户端你只需要用就可以了,就不用创建了,工厂来创建就可以了* C:缺点*  这个静态工厂类负责所有对象的创建,如果有新的对象增加,或者某些对象的创建方式不同,就需要不断地修改工厂类,不利于后期的维护*  也就是说:你得需要不断地去修改你的源码,是不利于后期的维护的* D:案例演示*  动物抽象类:public abstract Animal(public abstract void eat();)*  具体狗类:public class Dog extends Animal{}*  具体猫类:public class Cat extends Animal{}*  开始:在测试类中每个具体的内容自己创建对象,但是,创建对象的工作如果比较麻烦,就需要有人专门做这个事情,所以就制造了一个专门的类来创建对象* * 例如:本来我们创建对象需要自己去创建,比如说,你需要一只狗,自己就创建一个,而简单工厂认为,对于这件事就不劳费客户了,创建狗对象或者是猫对象,交个简单工厂去创建就可以了* 要狗,简单工厂就会给客户提供狗,要猫,简单工厂就会给顾客提供猫;所以,现在我们就要做一个工厂,这个工厂就是用来生产狗,或者猫的;* 首先,要创建工厂得有Animal、Dog、Cat这些类
package com.yy.简单工厂;public abstract class Animal {      //创建一个动物抽象类,在这个Animal抽象类里面有个  吃  的方法public abstract void eat();}
package com.yy.简单工厂;public class Dog extends Animal {       //创建一个狗类,让Dog类去继承Animal这个抽象类public void eat(){                  //并且去重写Animal里面的的eat这个抽象方法System.out.println("狗吃肉");    //然后输出一句话:狗吃肉}}
package com.yy.简单工厂;public class Cat extends Animal {           //创建一个猫类,让Cat类去继承Animal这个抽象类public void eat() {                     //并且去重写Animal里面的的eat这个抽象方法System.out.println("猫吃鱼");        //然后输出一句话:狗吃肉}}
package com.yy.简单工厂;public class AnimalFactory {                    //创建一个动物工厂,目的是为了生产动物,可以生产狗,也可以生产猫,需要啥就创建啥对象即可/*public static Dog createDog(){              //该方法用来创建狗return new Dog();                       //返回一个狗}public static Cat createCat(){              //该方法用来创建猫return new Cat();                       //返回一个猫}*///我们发现,如果动物太多的话,必须得定义很多个方法,复用性太差//改进public static Animal createAnimal(String name){         //返回类型为Animal,参数为一个 名字if("dog".equals(name)){                             //如果传入的是一只狗的话,就对参数进行判断return new Dog();                               //参数是狗,就返回一个狗}else if("cat".equals(name)){                       //如果传入的是一只猫的话,就对参数进行判断return new Cat();                               //参数是猫,就返回一个狗}else {                                             //如果传入的是既不是狗又不是猫的话return null;                                    //就返回一个null}//如果在有一个其他的类,就会返回null,一返回null,Test这个类就会进行,null就开始调用eat这个方法,然后就会出现空指针异常,这个就是简单工厂模式的弊端所在}}
package com.yy.简单工厂;public class Test {     //做一个测试类public static void main(String[] args) {/*Dog yy = AnimalFactory.createDog();                   //想要一只狗,运用  类名.  来调用System.out.println(yy);*/                               //打印 狗 ,这里没有重写toString方法,所以返回为类名+@+HashCode16进制Dog d = (Dog) AnimalFactory.createAnimal("dog");        //通过   类名.  来调用,由于 AnimalFactory.createAnimal该方法返回的是Animal,而我们通过Dog接收,所以这时要进行强转,由Animal类型强制转换为Dog类型d.eat();                                                //类名.方法    调用Dog类里面的eat方法//输出结果:狗吃肉Cat c =  (Cat) AnimalFactory.createAnimal("cat");c.eat();//输出结果:猫吃鱼}}

Java——设计模式(简单工厂模式)相关推荐

  1. 轻松看懂java设计模式简单工厂模式

    点击上方"好好学java",选择"置顶公众号" 优秀学习资源.干货第一时间送达! 精彩内容 java实战练习项目教程 2018微服务资源springboot.s ...

  2. Java设计模式 -- 简单工厂模式(SimpleFactory)

    一.什么是简单工厂模式 简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式.通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 二.模式中包含的角色及其职责 1.工厂(C ...

  3. java设计模式--简单工厂模式

    1.概念:建立一个工厂(一个函数或一个类方法)来制造新的对象,简单工厂模式静态工厂方法模式,存在的目的很简单:定义一个用于创建对象的接口. (注意点:简单工厂模式的方法是静态的) 2.组成: 1) 工 ...

  4. java设计模式-简单工厂模式

    1.实例化对象不需要new,用工厂模式 2.工厂模式分为(简单工厂模式,工厂方法模式,抽象工厂模式) package com.wuming.factory.simple;public interfac ...

  5. Java设计模式之 工厂模式(简单工厂模式)

    前一阵子学习了Java 中据说是最简单的设计模式的 单例模式,想一起讨论学习的小伙伴请点击这里: Java 设计模式之单例模式 那么今天就把学习的工厂模式记录下来 工厂模式: 实现了创建者和调用者的分 ...

  6. Java设计模式(工厂模式>抽象工厂模式和原型模式)

    Java设计模式Ⅱ 1.工厂模式 1.1 简单工厂模式 1.2 工厂方法模式 2.抽象工厂模式 3.总结 4.原型模式 4.1 原型模式 4.2 浅拷贝 4.3 深拷贝 5.建造者模式 1.工厂模式 ...

  7. 三角形圆形创建与擦除java_设计模式---------------简单工厂模式

    设计模式---------------简单工厂模式 一.题目(Question) 使用简单工厂模式设计一个可以创建不同几何形状(如圆形.方形和三角形等)的绘图工具,每个几何图形都要有绘制draw()和 ...

  8. Java 设计模式之工厂模式(二)

    原文地址:Java 设计模式之工厂模式(二) 博客地址:http://www.extlight.com 一.背景 本篇内容是 Java 设计模式创建型模式的第二篇.上一篇主题为 <Java 设计 ...

  9. java设计模式之工厂模式(UML类图分析+代码详解)

    大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...

最新文章

  1. 农科院张西美组助研招聘(事业编、解决北京户口)
  2. zabbix 监控端口,其他端口和此端口类似
  3. ChemDraw在苹果电脑上能不能用
  4. 功能性农业投融资-农业大健康·周荣江:国情讲坛体制创新
  5. 服务器应用缓存热点问题思考
  6. aspnetcore 实现简单的伪静态化
  7. 数学公式、可视化图齐齐上阵,神经网络如何一步步走向最优化「看得见」!...
  8. potplayer 多个进程_创建守护进程的步骤
  9. mysql数据库的存储过程不用学吗,MySql数据库之存储过程学习_MySQL
  10. python ddos 检测系统_python 检查是否存在ddos攻击
  11. 吴恩达深度学习2.1练习_Improving Deep Neural Networks(Initialization_Regularization_Gradientchecking)
  12. python输出para关键词占比_使用python操作word
  13. Python 库 Geopy 的用法,经纬度坐标转换、经纬度距离计算
  14. FreeSSL + ACME自动化续期域名SSL证书(支持泛域名)
  15. 美国之行---领略真正的美国文化--牛排
  16. Python动态画图小代码(Turtle Graphics)
  17. 新生研讨课:利用OpenCV处理带有水印的图片的调研报告
  18. 两个云服务器怎么互传文件,两个云服务器互传数据
  19. android adb 存储权限,android adb 权限修改
  20. Android大话设计模式 第三章----开放封闭原则---孙悟空任弼马温一职

热门文章

  1. mysql构建栋_【转载】这次拆库 应是微服务化的拆分方式
  2. mysql事务的重复性读_Mysql下InnoDB的可重复读级别的事务测试
  3. CSS布局(五) 网页布局方式
  4. vagrant网站中box下载方法
  5. 弱监督学习下商品识别:CVPR 2018细粒度识别挑战赛获胜方案简介
  6. 010 pandas的DataFrame
  7. java 与 c#的 中 字符串比较“==”与“equals”的差异
  8. 白话经典算法系列之中的一个 冒泡排序的三种实现
  9. Flash Builder 创建CSS
  10. POJ 3189 Steady Cow Assignment