文章目录

  • 一、工厂模式是什么?
  • 二、工厂模式
    • 案例
    • 工厂模式的优缺点
      • 优点
      • 缺点
  • 三、简单/静态工厂模式
    • 案例
    • 简单/静态工厂模式的优缺点
      • 优点
      • 缺点
  • 四、抽象工厂模式
    • 案例
    • 抽象工厂模式的优缺点
      • 优点
      • 缺点

一、工厂模式是什么?

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。


二、工厂模式

案例

  1. AnimalFactory(抽象)
// 号称什么宠物都有
public interface AnimalFactory {// 可以获取任何的宠物Animal createAnimal();
}
  1. Animal(抽象)
public abstract class Animal {// 所有的动物都会吃东西public abstract void eat();
}
  1. DogFactory CatFactory(具体)
// 继承着宠物工厂
public class DogFactory implements AnimalFactory {// 创建狗@Overridepublic Animal createAnimal() {return new Dog();}
}// 继承着宠物工厂
public class CatFactory implements AnimalFactory {@Override// 创建猫public Animal createAnimal() {return new Cat();}
}
  1. Dog Cat(具体)
public class Dog extends Animal {// 狗喜欢吃肉@Overridepublic void eat() {System.out.println("狗吃肉");}
}public class Cat extends Animal {// 猫喜欢吃鱼@Overridepublic void eat() {System.out.println("猫吃鱼");}
}
  1. test
public class test {public static void main(String[] args) {// 去找狗工厂拿一只狗过来AnimalFactory f = new DogFactory();// 店主就拿到了一只狗给Java3yAnimal a = f.createAnimal();a.eat();System.out.println("===========");// 去找猫工厂拿一只猫过来AnimalFactory ff = new CatFactory();// 店主就拿到了一只猫给Java3yAnimal aa = ff.createAnimal();aa.eat();}
}
  1. 结果

工厂模式的优缺点

优点

  • 客户端不需要在负责对象的创建,明确了各个类的职责
  • 如果有新的对象增加,只需要增加一个具体的类和具体的工厂类即可
  • 不会影响已有的代码,后期维护容易,增强系统的扩展性

缺点

  • 需要额外的编写代码,增加了工作量

三、简单/静态工厂模式

简单工厂比工厂少一层工厂

案例

1.Factory

public class AnimalFactory {public static Dog createDog() {return new Dog();}public static Cat createCat() {return new Cat();}// 外界想要猫要狗,这里创建就好了public static Animal createAnimal(String type) {switch (type) {case "dog":return new Dog();case "cat":return new Cat();default:return null;}}
}
  1. Animal(抽象)
public abstract class Animal {// 所有的动物都会吃东西public abstract void eat();
}
  1. Cat(实现)
public class Cat extends Animal {// 猫喜欢吃鱼@Overridepublic void eat() {System.out.println("猫吃鱼");}}
  1. Dog(实现)
public class Dog extends Animal {// 狗喜欢吃肉@Overridepublic void eat() {System.out.println("狗吃肉");}}
  1. Test
public class Test {public static void main(String[] args) {// 拿到狗Animal A = AnimalFactory.createAnimal("dog");A.eat();// 拿到猫Animal B = AnimalFactory.createAnimal("cat");B.eat();}}

7.结果

简单/静态工厂模式的优缺点

优点

  • 具体的工厂来创建对象,代码量少

缺点

  • 需求改变了,就要改代码

四、抽象工厂模式

抽象工厂比工厂多一层工厂

案例

  1. AnimalFactory
public interface AnimalFactory {Animal1 createDog();Animal1 createCat();
}
  1. Animal1
public abstract class Animal1 {// 所有的动物都会吃东西public abstract void eat();// 所有的动物都有性别public abstract void gender();
}
  1. MaleAnimalFactory FemaleAnimalFactory
public class MaleAnimalFactory implements AnimalFactory {// 生产公狗和公猫@Overridepublic Animal1 createDog() {return new MaleDog();}@Overridepublic Animal1 createCat() {return new MaleCat();}}public class FemaleAnimalFactory implements AnimalFactory {// 生产母狗和母猫@Overridepublic Animal1 createDog() {return new FemaleDog();}@Overridepublic Animal1 createCat() {return new FemaleCat();}}
  1. Dog Cat
public abstract class Dog extends Animal1 {// 狗喜欢吃肉@Overridepublic void eat() {System.out.println("狗吃肉");}}public abstract class Cat extends Animal1 {// 猫喜欢吃鱼@Overridepublic void eat() {System.out.println("猫吃鱼");}
}
  1. FMaleDog FMaleCat
public class MaleDog extends Dog{public void gender() {System.out.println(" Male dog");}
}public class MaleCat extends Cat {public void gender() {System.out.println("MaleCat Cat");}}
public class FemaleDog extends Dog{public void gender() {System.out.println("female dog");}
}
public class FemaleCat extends Cat {public void gender() {System.out.println("female Cat");}}
  1. test
public class test {public static void main(String[] args) {// 需要性别为母的就去找母工厂AnimalFactory af = new FemaleAnimalFactory();// 需要一只母猫af.createCat().gender();// 需要一只母狗af.createDog().gender();System.out.println("======================");// 需要性别为公的就去找公工厂AnimalFactory aff = new MaleAnimalFactory();// 需要一只公狗aff.createDog().gender();// 需要一只公猫aff.createCat().gender();}
}
  1. 结果

抽象工厂模式的优缺点

优点

  • 多了一层抽象,减少了工厂的数量

缺点

  • 扩展产品族

设计模式-工厂模式(Factory)相关推荐

  1. 设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)

    工厂模式 Factory Pattern(简单工厂.工厂方法.抽象工厂) 工厂模式-创建型模式-提供了创建对象的最佳方式. 在工厂模式中,创建对象时不会对客户端暴露创建逻辑,并且是通过一个共同的接口来 ...

  2. [设计模式]工厂模式factory

    参考:http://wxg6203.iteye.com/blog/740229 简单工厂模式(simple factory)是类的创建模式,又叫静态工厂方法(static factory method ...

  3. 趣谈设计模式 | 工厂模式(Factory):利用工厂来创建对象

    文章目录 案例:外设店铺 简单工厂 工厂方法 抽象工厂 总结 要点 三类工厂模式的特点 三种工厂模式的适用场景 完整代码与文档 工厂模式模式是创建型模式中较为常用的一个,它并不是一个模式,而是三种功能 ...

  4. (创建型)设计模式——工厂模式(factory)

    ps:在以下讲述工厂模式中,模仿的场景如下:我们需要生产Car,建立相对应的CarFactory.使用CarFactory工厂来生产Car,并且可以在生产过程中进行一些处理.类图和代码如下. 1.Mo ...

  5. 魔兽争霸之PHP设计模式-工厂模式[Factory]

    前言:相信有的人接触过会员系统,有的甚至写过.本文章不是为了说明怎么建设一个会员系统.而是提出一种思路.想学怎么建会员系统的可以不看本文,而想知道怎么建得更专业点的没事可以看看.哈哈. 问题的提出: ...

  6. 设计模式(一)工厂模式Factory(创建型)

    设计模式一 工厂模式Factory 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题. ...

  7. 设计模式(四)——工厂模式(Factory Pattern)

    工厂模式(Factory Pattern) 意义 工厂模式 实现了创建者和调用者的分离.将实例化对象的代码提取出来,放到一个类中统一管理和维护,达到和主项目的依赖关系的解耦.从而提高项目的扩展和维护性 ...

  8. 设计模式 - 学习笔记 - 工厂模式Factory Pattern

    设计模式 - 学习笔记 - 工厂模式Factory Pattern 1. 简单工厂 1.1 应用场景 1.2 UML 1.3 优劣分析 好处 缺点 1.4 代码示例 抽象产品 AbstractProd ...

  9. 设计模式——工厂模式(Factory Pattern)

    设计模式--工厂模式(Factory Pattern) 工厂顾名思义就是创建产品,根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式.该 ...

  10. 设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern。

    设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern. 文章目录 设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern. eg. 简单工厂模式. 结构. 优 ...

最新文章

  1. Java多线程编程模式实战指南(二):Immutable Object模式--转载
  2. grunt的学习和使用
  3. 看几道JQuery试题后总结(下篇)
  4. 《纵向切入ASP.NET 3.5控件和组件开发技术》笔记:高效率事件集合对象
  5. Weblogic 10.3.2 安装过程中出现致命错误的处理方法
  6. OJ1080: a+b(多实例测试3)(C语言)
  7. 如何在CSDN中免费下载资料?
  8. xshell 连接错误: Could not connect to '127.0.0.1' (port 22): Connection failed.
  9. 106.比特率和波特率
  10. word选择性粘贴html和rtf,Word“选择性粘贴”功能有妙用
  11. torch.Generator 随机数生成器
  12. InnoDB一棵B+树可以存放多少行数据?
  13. 触屏笔和电容笔哪个好?非常值得入手的电容笔推荐
  14. IC Nansha|AMD高级副总裁、大中华区总裁潘晓明:制程、架构、平台优化突破计算边界
  15. linux 命令 root用户把某个文件权限给到普通用户
  16. 【数据结构】7-1 软硬车厢交替排列 (13 分)
  17. Towards Binary-Valued Gates for Robust LSTM Training
  18. 嵌入式Linux--Lichee Pi Zero原理图分析
  19. 馈线自动化的主要采用计算机技术,配电及馈线自动化技术探讨
  20. 校园卡(NFC卡)文章的整理

热门文章

  1. 到2020年,将有60%的工作会被人工智能取代?
  2. 2022 最新Robots.txt文件教程
  3. XFP模块和SFP光模块
  4. QT 信号toggled triggered区别
  5. 程序员之间的幽默段子,句句都是经典
  6. Android锁屏下弹窗的尝试,android开发实战我的云音乐
  7. Linux救援(rescue)模式知识点
  8. GDAL自带的 rpc纠正和金字塔文件生成方法
  9. 类的加载、连接和初始化
  10. 设计一个立方体类(长方体)Box,它能计算并输出立方体的体积和表面积。