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知识库 -> 《设计模式奇妙之旅》第3章 抽象工厂模式 -> 正文阅读

[Java知识库]《设计模式奇妙之旅》第3章 抽象工厂模式

第3章 抽象工厂模式

3.1 关于抽象工厂模式

我们在上面学习了,工厂方法模式,如果我们以前没有正确的使用过面向对象的知识。我们会惊讶 工厂方法模式 ,
oh my gad原来还有这种操作。这次我们即将学习的一种设计模式叫做 抽象工厂模式 。我们先来揣摩一下这个名字,能不能大概猜出它是怎样的呢。
我们不如先回顾一下 工厂方法模式 这个名字 工厂:我们让一个类使用其方法作为对象的创作者,外部只需要赋予它指令,工厂方法创建一个新的相应对象返回给调用者。

抽象工厂模式是用一个工厂创建其他工厂。这个设计模式属于创建型模式,它提供了一种创建对象的方式。

抽象工厂模式 我们是不是要把工厂给抽象起来,用抽象类实现,编写出许多工厂类继承抽象工厂类,各自的工厂类实现创建相应的对象实体。以实现隐藏对象创建的细节。
不要要慌,我们慢慢地往下面看。我希望你可以把这个系列地博客当做吃饭时可以快速阅读地小故事一样。利用碎片化的时间来达到学到知识的效果。
在这个互联网盛行的时代,我们好像都变得非常地忙碌,一天下来躺在床上一想今天好像没有做太多有价值地东西。但我相信,利用平时的点滴来积累我们总会比哪些没有学过的人要强许多。

加油吧!禄哥一直会再次陪伴你,知道把这些常见的设计模式过一边,我不是什么有丰富经验的工作开发者,也不是某个领域的专家。我只是一个在双非学校没见过什么世面的无名本科生。我都可以坚持下去、何况你呢?

3.2 来一个小故事

一家衣服工厂,正在生产不同的衣服套装,例如上衣与下衣有不同的搭配,但总是按搭配成对生产的。也就是以生产就是一套。
然而有各种各样的上衣与下衣,我们怎样来构建一个易管理的程序呢。我们一起来看一看抽象工厂模式。

3.3 试着编写下代码

先看一下类图
在这里插入图片描述

可见创建一个超级工厂,这个超级工厂是抽象的,使用上衣工厂与下衣工厂来继承超级工厂,实现各自需要实现的工厂方法。
BottomDress 与 TopDress接口将上衣与下衣进行了抽象处理,并用各自的子类来实现其方法。
可见与工厂方法的区别就是,我们在工厂之上加了一层工厂,将创建工厂细节进行隐藏。往各个工厂下的逻辑与工厂方法模式是一致的。
抽象工厂在多个工厂且这些工厂创建的对象有某种意义上的联系时,用抽象工厂模式有便利于创作者。
其内部的开发者也便于增添删减内容,且有条有序。
main.java

测试样例

package AbstractFactoryPattern;

public class main {
    private static AbstractFactory topFactory;
    private static AbstractFactory bottomFactory;
    public static void main(String[] args) {
        //初始化工厂
        topFactory=new TopDressFactory();
        bottomFactory=new BottomDressFactory();
        //进行生产
        product("T恤","裙子");
        product("大衣","牛仔裤");
    }
    //生产
    public static void product(String top,String bottom){
        TopDress topDress=topFactory.getTopDress(top);
        BottomDress bottomDress=bottomFactory.getBottomDress(bottom);
        topDress.name();
        bottomDress.name();
        System.out.println("------------");
    }
}

运行结果:
T恤
裙子

大衣
牛仔裤

AbstractFactory.java

超级抽象工厂

package AbstractFactoryPattern;

public abstract class AbstractFactory {
    abstract TopDress getTopDress(String type);
    abstract BottomDress getBottomDress(String type);
}

BottomDress.java

下衣接口

package AbstractFactoryPattern;

public interface BottomDress {
    public void name();
}

TopDress.java

上衣接口

package AbstractFactoryPattern;

public interface TopDress {
    public void name();
}

BottomDressFactory.java

下衣工厂

package AbstractFactoryPattern;

public class BottomDressFactory extends AbstractFactory{
    @Override
    TopDress getTopDress(String type) {
        return null;
    }

    @Override
    BottomDress getBottomDress(String type) {
        BottomDress back=null;
        if(type.equals("裙子")){
            back=new Skirt();
        }else if(type.equals("牛仔裤")){
            back=new Jeans();
        }
        return back;
    }
}

TopDressFactory.java

上衣工厂

package AbstractFactoryPattern;

public class TopDressFactory extends AbstractFactory{
    @Override
    TopDress getTopDress(String type) {
        TopDress back=null;
        if(type.equals("大衣")){
            back=new Overcoat();
        }else if(type.equals("T恤")){
            back=new TShirt();
        }
        return back;
    }

    @Override
    BottomDress getBottomDress(String type) {
        return null;
    }
}

Jeans.java

牛仔裤

package AbstractFactoryPattern;

public class Jeans implements BottomDress{
    @Override
    public void name() {
        System.out.println("牛仔裤");
    }
}

Skirt.java

裙子

package AbstractFactoryPattern;

public class Skirt implements BottomDress{
    @Override
    public void name() {
        System.out.println("裙子");
    }
}

Overcoat.java

大衣

package AbstractFactoryPattern;

public class Overcoat implements TopDress{
    @Override
    public void name() {
        System.out.println("大衣");
    }
}

TShirt.java

T恤

package AbstractFactoryPattern;

public class TShirt implements TopDress{
    @Override
    public void name() {
        System.out.println("T恤");
    }
}

总结

看完上面的内容,可能我们会感叹不就是在多个工厂的时候,为这些工厂再建一个工厂吗。
抽象工厂模式更适合于多个工厂的情况,使用抽象工厂模式更有利于对程序进行管理。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-10-11 17:22:52  更:2021-10-11 17:25:05 
 
开发: 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/23 22:09:02-

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