您现在的位置是:首页 > 正文

Java进阶——工厂模式

2024-04-01 01:07:35阅读 4

介绍设计模式

设计模式是什么?

  • 设计模式是前辈总结的设计经验
  • 设计模式的目标是代码更容易理解,更容易维护
  • 通过设计模式可以使代码更可靠

设计模式的分类

按照设计模式的行为分类,可以将设计模式分为三类:

  • 创建型模式——核心宗旨是如何更加精巧的创建对象
  • 结构性模式——在软件结构上重构,抽象使得结构更加合理
  • 行为性模式——根据现实对行为约束优化

介绍工厂模式的用途和特点

工厂模式

工厂模式是创建型模式最基础,最重要的一种设计模式

  • 工厂模式用于隐藏创建对象的细节
  • 工厂模式的核心是:工厂类(Factory)
  • 工厂模式可以细分为:简单工厂,工厂方法与抽象工厂

简单工厂

在这里插入图片描述
最开始的时候,客户端需要一个一个去尝试,哪一个实际的类满足我的需求,我才去调用它获取实际对象,现在引入工厂类之后,我们只需要把它交给工厂类,客户端只需要执行抽象接口的方法,具体使用哪一个实现类由工厂类决定,简化了客户类操作。

项目应用-i18n国际化

示例代码:
抽象类 I18N:

public interface I18N {
    public String getTitle();
}

实现类1:chinese

public class Chinese implements I18N{
    @Override
    public String getTitle(){
        return "人事管理系统";
    }
}

实现类2:Italian

public class Italian implements I18N{
    @Override
    public String getTitle(){
        return "Sistemi di gestione del personale";
    }
}

工厂类:

public class I18NFactory {
    public static I18N getI18NObject(String area){
        if (area.equals("china")){
            return new Chinese();
        }else if(area.equals("spain")){
            return new Spainish();
        }else if (area.equals("italy")){
            return new Italian();
        }else {
            return null;
        }
    }
}

最终调用:

public class Software {
    public static void main(String[] args) {
        I18N i18n = I18NFactory.getI18NObject("italy");
        System.out.println(i18n.getTitle());
    }
}

这里有几种使用重点需要关注一下
1.实现类实现相同接口
2.使用时无论是工厂方法还是使用都是面向接口开发
3.由工厂决定最后的执行类
4.由static描述的工厂成为静态工厂,不需要实例化工厂对象,直接类调用就可以。

掌握工厂模式的项目应用

项目应用—多端应用切换

具体代码见:https://gitee.com/PeopleRepublicOfChina/maven_web_factory
效果如下:
当使用电脑访问时,页面展示为:
在这里插入图片描述

当切换为手机端访问时,页面展示为:
在这里插入图片描述

网站文章

  • minikube安装kubernetes(Centos7)【图文】

    minikube安装kubernetes(Centos7)【图文】

    k8s有很多种安装方式minikube允许使用mac、linux、windows快速创建一个k8s集群;也可以使用kubeadm方式基于二进制快速安装一个集群;但是需要在生产环境执行的k8s集群需要使...

    2024-04-01 01:07:26
  • SpringMVC 之validator验证笔记(五)

    SpringMVC支持的数据校验是JSR303的标准,通过在bean的属性上打上annotation @NotNull @Max等进行验证。JSR303提供有很多annotation借口,而SpringMVC对于这些验证是使用hibernate的实现,所以我们需要添加hibernate的一个validator包: org.hibernate hibernate-valid

    2024-04-01 01:06:56
  • clould front 中的createinvalidation 是个什么东西?

    CloudFront 中的 CreateInvalidation 是一个用于刷新缓存的 API 操作。当您更新了存储在 CloudFront 缓存中的对象时,可能需要使用 CreateInvalida...

    2024-04-01 01:06:48
  • java中使用akka手记三 cluster详例

    http://www.tuicool.com/articles/m2muui原文  http://2014.54chen.com/blog/2014/04/17/how-to-use-akka-in-java-3/ 一个例子同样是typesafe的经典例子。例子提供的服务是传输文本。当文本发给frontend节点,它会委派backend节点,backend执行转化任务,

    2024-04-01 01:06:40
  • fastadmin开发插件的基本流程

    fastadmin开发插件的基本流程

    什么是fastadmin? FastAdmin是一款基于ThinkPHP5+Bootstrap的极速后台开发框架。 fastadmin开发基础管理插件步骤 以一个学校管理插件为例 开发环境与工具 PHPSTORM phpstudy nginx1.15.11 mysql8.0 php7.3.4 准备工作 配置站点 我的域名设置为fast51admin.localhost....

    2024-04-01 01:06:10
  • ios swift 继承_Swift中的继承

    ios swift 继承 什么是继承? (What is Inheritance?) Inheritance allows a class to have the same behavior as o...

    2024-04-01 01:05:36
  • 基于顺序表实现栈的基本操作

    基于顺序表实现栈的基本操作

    栈:什么是栈?又该怎么理解呢?栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。栈就是一个桶,后放进去的先拿出来,它下面本来有的东西要等它出来之后才能出来(先进后出)栈(Stack)是操作系统在建立某个进程时或者线程(在支持多线程的操作系统中是线程)为这个线程建立的存储区域,该区域具有FIFO的特性,在编

    2024-04-01 01:05:31
  • NTP配置时间同步

    Oracle RAC两个节点,配置NTP使得两个节点时间同步 1)节点1和节点2都启动NTP服务,节点2(客户端)向节点1(服务器端)同步 如果测试用,可修改节点2的时间不同于节点1的时间,...

    2024-04-01 01:05:25
  • linux主机加入组播组,linux下不同主机间实现组播(练习代码)

    在写聊天室程序时,遇到一个组播问题,不能在不同主机上进行发送接收消息。。。深究发现,是本人对sendto与recvfrom的理解太浅薄。以下代码发送端与接收端可在同一主机,也可在不同主机上运行。代码直...

    2024-04-01 01:05:18
  • 正则表达式总结

    第一点:--------------有关正则前沿介绍 正则表达式是用来进行文本处理的技术,是语言无关的,在几乎所有语言中都有实现。javascript中还会用到。一个正则表达式就是由普通字符以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。就像通配符“*.jpg”、“%ab%”,它...

    2024-04-01 01:04:52