java 设计模式 路由器_Java设计模式——工厂模式
工厂模式
本质:创建对象不使用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设计模式——工厂模式相关推荐
- java 设计模式 路由器_java设计模式2————工厂模式
java设计模式2----工厂模式 1.工厂模式介绍: 1.1.实现了创建者与调用者的分离 1.2.详细分类: 简单工厂模式 工厂方法模式 抽象工厂模式 1.3.所遵循的OOP原则: 开闭原则:对扩展 ...
- Java设计模式(1)工厂模式(Factory模式)
工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因 ...
- JAVA设计模式之3种工厂模式
转自 JAVA设计模式之3种工厂模式 创建型模式 创建型模式(Creational Pattern)对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离.为了使软件的结构更加清晰,外 ...
- java 设计模式 示例_Java设计模式–示例教程
java 设计模式 示例 Design Patterns are very popular among software developers. A design pattern is a well- ...
- 23种设计模式之单例模式、工厂模式、原型模式、建造者模式
系列文章目录 第一章:程序设计原则-单一职责.接口隔离.依赖倒置.里式替换 第二章:程序设计原则-开闭原则.迪米特法则.合成复用原则 文章目录 系列文章目录 一.设计模式简单介绍 1.1.什么是设计模 ...
- 设计模式(五)--工厂模式汇总
LZ想把简单工厂模式.工厂方法模式和抽象工厂模式整理到一篇博文当中,由浅入深,应该能方便理解和记忆,话不多说,进入正题. 一.简单工厂模式 定义:从设计模式的类型上来说,简单工厂模式是属于创建型模式, ...
- 一口气讲完设计模式(单例模式、工厂模式、原型模式、建造者模式、适配器、桥梁模式)
设计模式 使用设计模式,可以让我们的代码具有更好的可读性.可扩展性.可读性.重用性.符合高内聚低耦合的特点.作为程序员,是我们经常听到的概念,也是我们程序员必须深入学习,了解的知识. 设计模式种类 该 ...
- 【23种设计模式专题】二 工厂模式
程序猿学社的GitHub,欢迎Star github技术专题 本文已记录到github 文章目录 前言 小故事 传统方式 简单工厂(第一种) 工厂方法模式(第二种) 抽象工厂模式(第三种) 使用工厂方 ...
- 设计模式 笔记4 | 简单工厂模式 在源码中的应用 | Calendar 日历 | 源码浅析 | 使用总结 | 建造者模式
文章目录 一.Calendar 日历类 1.1 内部属性 1.2 设置时间属性值 1.3 获取时间属性 1.4 使用 Calander 计算时间 二.Calender 类中的设计模式 2.1 简单工厂 ...
最新文章
- window路径和linux路径变换,从linux样式路径转换时,Docker装入的卷将; C添加到Windows路径的末尾...
- 菜鸟配置SAMBA服务之4
- Android规范发展
- linux connect自动重连,Linux系统中使用sshfs挂载远程主机的目录到本地系
- python- 常见算法 python内置模块
- rabbitmq订单模块_RabbitMQ播放模块! 构架
- 树模型——机器学习面试
- php 连接主从redis,PHP7对Redis的扩展及Redis主从搭建
- 模仿王者荣耀的实时阴影
- Leetcode每日一题:48.rotate-image(旋转图像)
- vue+three.js开发
- Linux下MySQL数据库的备份与还原
- veu 中 nprogress 的 使用方法
- Linux——vim使用及账号用户管理
- Servlet内存马
- 盒装Ubuntu着装绝妙,闪亮登场
- 基于PCIe的通用信号处理板PCIe-KU040-FMC
- ffplay flv mp4 转_利用 FFmpeg 将 MP4 转成 FLV
- 一见倾心的心仪好物 野小兽Monica筋膜枪评测
- Cocos creator Graphics绘制线条却出现的是填充图案
热门文章
- EndNote中英文混排
- @[TOC](CDN防御与高防服务器防御的区别
- python爱好者社区 投稿_2018年Python爱好者社区历史文章合集(作者篇)
- 轮训网页,并打开截图保存
- matlab 沙丁,基于三维空间关于海豚围捕沙丁鱼群的运动规律
- 百度竞价排名曝光_百度爱采购的三大优势,及如何发优质商品。
- ui动画_ui后效动画指南
- Eclipse下Tomcat项目自动部署路径问题(.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps)
- 关键词4K图片采集下载软件【非常适合做电脑壁纸等】
- 《最伟大的投资习惯》读书笔记