工厂模式

本质:创建对象不使用new而使用工厂方法代替。

简单工厂模式

工厂所管理的类的统一接口:Productpublic interface Product {

void work();

}

具体实现类:Phone和Computerpublic class Computer implements Product {

@Override

public void work() {

System.out.println("computer work...");

}

}public class Phone implements Product {

@Override

public void work() {

System.out.println("phone work...");

}

}

工厂类创建根据传入的名称创建对应产品:public class SimpleFactory {

public static Product getProduct(String name){

switch (name){

case "phone":

return new Phone();

case "computer":

return new Computer();

default:

return null;

}

}

public static void main(String[] args) {

Product phone = SimpleFactory.getProduct("phone");

if (phone!=null){

phone.work();

}

}

}

优点:编写简单

缺点:每次新增一个产品类型都要改动getProduct()代码。

工厂方法模式

产品和简单工厂一样继承Product

新增接口 ProductFactory 用于生成产品public interface ProductFactory {

Product getProduct();

}

新增实际产品的工厂/**

* @author objcfeng

* @description 电脑工厂

* @date 2020/10/20

*/

public class ComputerFactory implements ProductFactory {

@Override

public Product getProduct() {

return new Computer();

}

}public class PhoneFactory implements ProductFactory {

@Override

public Product getProduct() {

return new Phone();

}

}

测试类:public class Main {

public static void main(String[] args) {

new PhoneFactory().getProduct().work();

}

}

相较于简单工厂模式来说,解决了对修改关闭的不支持的问题,但是代码更复杂。

抽象工厂模式

产品不需要统一的接口,因为若都实现统一的接口,在产品工厂生产产品时,不好做区分,需要传入参数做判断。

产品:

手机接口public interface IPhoneProduct {

void work();

}

路由器接口public interface IRouterProduct {

void work();

}

产品的实现类:public class HuiWeiPhone implements IPhoneProduct {

@Override

public void work() {

System.out.println("华为手机");

}

}

...

产品工厂:public interface ProductFactory {

IRouterProduct getRouter();

IPhoneProduct getPhone();

}

华为工厂:public class HuaWeiFactory implements ProductFactory {

@Override

public IRouterProduct getRouter() {

return new HuaWeiRouter();

}

@Override

public IPhoneProduct getPhone() {

return new HuiWeiPhone();

}

}

小米工厂:public class XiaoMiFactory implements ProductFactory {

@Override

public IRouterProduct getRouter() {

return new XiaoMiRouter();

}

@Override

public IPhoneProduct getPhone() {

return new XiaoMiPhone();

}

}

测试:public class Main {

public static void main(String[] args) {

new XiaoMiFactory().getPhone().work();

}

}

抽象工厂方法把一个品牌的产品很好的分离开来,添加产品族(一个品牌的所有产品)很方便。

java 设计模式 路由器_Java设计模式——工厂模式相关推荐

  1. java 设计模式 路由器_java设计模式2————工厂模式

    java设计模式2----工厂模式 1.工厂模式介绍: 1.1.实现了创建者与调用者的分离 1.2.详细分类: 简单工厂模式 工厂方法模式 抽象工厂模式 1.3.所遵循的OOP原则: 开闭原则:对扩展 ...

  2. Java设计模式(1)工厂模式(Factory模式)

    工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因 ...

  3. JAVA设计模式之3种工厂模式

    转自 JAVA设计模式之3种工厂模式 创建型模式 创建型模式(Creational Pattern)对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离.为了使软件的结构更加清晰,外 ...

  4. java 设计模式 示例_Java设计模式–示例教程

    java 设计模式 示例 Design Patterns are very popular among software developers. A design pattern is a well- ...

  5. 23种设计模式之单例模式、工厂模式、原型模式、建造者模式

    系列文章目录 第一章:程序设计原则-单一职责.接口隔离.依赖倒置.里式替换 第二章:程序设计原则-开闭原则.迪米特法则.合成复用原则 文章目录 系列文章目录 一.设计模式简单介绍 1.1.什么是设计模 ...

  6. 设计模式(五)--工厂模式汇总

    LZ想把简单工厂模式.工厂方法模式和抽象工厂模式整理到一篇博文当中,由浅入深,应该能方便理解和记忆,话不多说,进入正题. 一.简单工厂模式 定义:从设计模式的类型上来说,简单工厂模式是属于创建型模式, ...

  7. 一口气讲完设计模式(单例模式、工厂模式、原型模式、建造者模式、适配器、桥梁模式)

    设计模式 使用设计模式,可以让我们的代码具有更好的可读性.可扩展性.可读性.重用性.符合高内聚低耦合的特点.作为程序员,是我们经常听到的概念,也是我们程序员必须深入学习,了解的知识. 设计模式种类 该 ...

  8. 【23种设计模式专题】二 工厂模式

    程序猿学社的GitHub,欢迎Star github技术专题 本文已记录到github 文章目录 前言 小故事 传统方式 简单工厂(第一种) 工厂方法模式(第二种) 抽象工厂模式(第三种) 使用工厂方 ...

  9. 设计模式 笔记4 | 简单工厂模式 在源码中的应用 | Calendar 日历 | 源码浅析 | 使用总结 | 建造者模式

    文章目录 一.Calendar 日历类 1.1 内部属性 1.2 设置时间属性值 1.3 获取时间属性 1.4 使用 Calander 计算时间 二.Calender 类中的设计模式 2.1 简单工厂 ...

最新文章

  1. window路径和linux路径变换,从linux样式路径转换时,Docker装入的卷将; C添加到Windows路径的末尾...
  2. 菜鸟配置SAMBA服务之4
  3. Android规范发展
  4. linux connect自动重连,Linux系统中使用sshfs挂载远程主机的目录到本地系
  5. python- 常见算法 python内置模块
  6. rabbitmq订单模块_RabbitMQ播放模块! 构架
  7. 树模型——机器学习面试
  8. php 连接主从redis,PHP7对Redis的扩展及Redis主从搭建
  9. 模仿王者荣耀的实时阴影
  10. Leetcode每日一题:48.rotate-image(旋转图像)
  11. vue+three.js开发
  12. Linux下MySQL数据库的备份与还原
  13. veu 中 nprogress 的 使用方法
  14. Linux——vim使用及账号用户管理
  15. Servlet内存马
  16. 盒装Ubuntu着装绝妙,闪亮登场
  17. 基于PCIe的通用信号处理板PCIe-KU040-FMC
  18. ffplay flv mp4 转_利用 FFmpeg 将 MP4 转成 FLV
  19. 一见倾心的心仪好物 野小兽Monica筋膜枪评测
  20. Cocos creator Graphics绘制线条却出现的是填充图案

热门文章

  1. EndNote中英文混排
  2. @[TOC](CDN防御与高防服务器防御的区别
  3. python爱好者社区 投稿_2018年Python爱好者社区历史文章合集(作者篇)
  4. 轮训网页,并打开截图保存
  5. matlab 沙丁,基于三维空间关于海豚围捕沙丁鱼群的运动规律
  6. 百度竞价排名曝光_百度爱采购的三大优势,及如何发优质商品。
  7. ui动画_ui后效动画指南
  8. Eclipse下Tomcat项目自动部署路径问题(.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps)
  9. 关键词4K图片采集下载软件【非常适合做电脑壁纸等】
  10. 《最伟大的投资习惯》读书笔记