IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java设计模式--工厂方法模式 -> 正文阅读

[Java知识库]Java设计模式--工厂方法模式

工厂方法模式

1.工厂方法模式的概述
1.1工厂模式是简单工厂模式的延伸,符合开闭原则的基础上,还可以在增加新的具体产品对象时不需要对已有系统做任何修改。

1.2工厂方法模式:定义一个用于创建对象的接口,但是让子类决定将哪个类实例化,工厂方法模式让一个类的实例化延伸到其子类。(也就是说在工厂方法模式中,不再提供一个统一的工厂类来创建所有的产品对象,而是对于不同的产品提供不同的工厂。例如:宝马工厂生产宝马汽车,奔驰工厂生产奔驰汽车。。。。。)

2.工厂方法模式的结构
2.1模式结构:

在这里插入图片描述

 (1):Product(抽象产品):定义产品的接口,是工厂方法模式所创建对象的超类型,产品对象的公共父类。
(2)具体产品:它实现了抽象产品接口,某种类型的具体产品由专门的具体工厂创建,具体工厂和具体产品一一对应。
(3)Factory(抽象工厂):在抽象工厂类中声明了工厂方法,用于返回同一个产品。
(4)具体工厂:抽象工厂的子类,实现了在抽象工厂中声明的工厂方法,并可由客户端调用,返回一个具体产品类的实例。。。

例题:宝马(BMW)工厂制造宝马汽车,奔驰汽车(Benz)工厂制造奔驰汽车。使用工厂方法模式模拟该场景,要求绘制出相应的类图并用Java语言模拟实现。
在这里插入图片描述

(1)Car:充当抽象产品角色

public abstract class Car {
    public abstract void run();//抽象产品方法
}

(2)BMW :充当具体的产品角色

public class BMW extends Car {
    @Override
    public void run() {
        System.out.println("宝马车跑的快...");
    }
}

(3)Benz:充当具体的产品角色

public class Benz extends Car{
    @Override
    public void run() {
        System.out.println("奔驰车跑的块...");
    }
}

(4)CarFactory:充当抽象工厂角色

public abstract class CarFactory {
    public void run(){
        Car car = this.produceCar();//在工厂类中直接调用汽车工厂类得业务方法run()
        car.run();
    }
    public abstract Car produceCar();//抽象工厂方法.
}

(5)BenzFactory:充当具体工厂角色

public class BenzFactory extends CarFactory{
    @Override
    public Car produceCar() {
        Car car = new Benz();//创建奔驰汽车的对象
        return car;
    }
}

(6)BMWFactory:充当具体工厂角色

public class BMWFactory extends CarFactory{
    @Override
    public Car produceCar() {
        Car car = new BMW();//创建宝马汽车的对象
        return car;
    }
}

(7)客户端测试类。

public class Client {
    public static void main(String[] args) {
        CarFactory factory, factory1;
        Car car,car1;
        factory = new BenzFactory();
        factory1 = new BMWFactory();
        car = factory.produceCar();
        car1 = factory1.produceCar();
        car1.run();
        car.run();
    }
}

3.工厂模式的优点:
(1)使用工厂方法来创建用户所需的产品,用户只要关心所需产品对应的工厂,无需关心创建的细节。
(2)所有的具体工厂类都具有同一抽象父类(本例中的CarFactory作为BMWFactory和BenzFactory 的父类)工厂能自行确定创建何种产品对象,而创建的细节完全封装在具体工厂中。
(3)如果新加入产品,就无需修改抽象工厂类和抽象产品类,也无需修改其他具体工厂和产品,而只用添加一个具体工厂和具体产品即可。增加系统的可扩展性,符合开闭原则

4.缺点:
添加新产品会增加具体工厂类和具体产品类,这无疑会增加系统的复杂度,带来更多的开销。。。

总结:当然这题可以使用反射机制并引入配置文件实现。(会更加灵活)具体的实现方式,下次发文详细说明。

最后:希望多多指教,共同进步,与君共勉!!!(争取一周写1-2篇有关Java设计模式的文章,临近期末也当做复习了。。。)

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-12-10 10:55:44  更:2021-12-10 10:57:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:43:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码