Creational Patterns Part 1/5: Factory Pattern-程序员宅基地

技术标签: java  设计模式  

Creational Patterns Part 1/5: Factory Pattern

目录


Definition

Factory Pattern是Java中最常用的设计模式之一。这个模式属于Creational Patterns的原因就是它会Create一个对象。

何时使用?当希望使用统一的接口创建不同的实现类对象并且对用户隐藏对象的创建逻辑时。

使用频率:Frequency of use High


UML Class Diagram

Factory Pattern


Implementation

Shape接口,含有draw()方法。
创建Shape接口的实现类(Circle, Square和Rectangle)就可以交给ShapeFactory来实现。


// Shape.java
package designpatterns.creationalpatterns.factory;

public interface Shape {
      
    void draw();
}

// FactoryDemo.java
package designpatterns.creationalpatterns.factory;

public class FactoryDemo {
      
    public static void main(String[] args) {
        ShapeFactory factory = new ShapeFactory();

        Shape shape = factory.getShape("circle");
        shape.draw();

        shape = factory.getShape("square");
        shape.draw();

        shape = factory.getShape("rectangle");
        shape.draw();
    }
}

class ShapeFactory {

    Shape getShape(String shapeType) {
        if (shapeType == null)  return null;

        if (shapeType.equalsIgnoreCase("CIRCLE")) {
            return new Circle();
        } else if (shapeType.equalsIgnoreCase("SQUARE")) {
            return new Square();
        } else if (shapeType.equalsIgnoreCase("RECTANGLE")) {
            return new Rectangle();
        }
        return null;
    }
}

class Circle implements Shape {

    @Override
    public void draw() {
        System.out.println("Circle::draw");
    }
}

class Square implements Shape {

    @Override
    public void draw() {
        System.out.println("Square::draw");
    }
}

class Rectangle implements Shape {

    @Override
    public void draw() {
        System.out.println("Rectangle::draw");
    }
}

// output
Circle::draw
Square::draw
Rectangle::draw

转载于:https://www.cnblogs.com/1202zhyl/p/5726865.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30823227/article/details/95007999

智能推荐

三代测序(SMRT Sequencing)_ccs三代测序clr-程序员宅基地

文章浏览阅读2k次,点赞2次,收藏7次。三代测序(SMRT Sequencing)白墨目前主流三代测序平台除了Oxford 家的 Nanopore,还有 Pacific Biosciences(简称 PacBio)公司的 Single Molecule Real-Time(SMRT)Sequencing。 该平台的优势在于:在不会影响吞吐量和准确性的前提下,提供目前最长的读取长度如果不含系统误差,准确度可达 99.999%可测取富含AT或GC区域,高度重复序列,回文序列等,不会产生GC的较大偏差 可以直接测取化学修饰,在_ccs三代测序clr

怎么连接vm的远程服务器,vm虚拟机连接远程服务器(vm虚拟机搭建服务器)-程序员宅基地

文章浏览阅读4.8k次。按照以下过程操作,即可在“虚拟机”视图中连接到虚拟机。虚拟机必须处于运行、停止、暂停或保存状态,才能连接和查看虚拟机。要连接到虚拟机,必须符合下列要求。我是这样想的,我是路由器上网,想用虚拟机开启远程桌面连接,任何电脑都。其实可以设置桥接网络,然后设置IP和你需要连接的电脑为一个网段(比如要连接的电脑是192.168.1.12,那么你的虚拟机里面的IP也要设置为192.168.1.xxx),这样再..._vm连接远程服务器

(免费领源码)SSM&Mysql大学生社团信息管理系统APP99953-计算机毕业设计-程序员宅基地

文章浏览阅读38次。本系统采用的数据库是Mysql,使用SSM技术开发。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。

南开大学2021年题库考试,南开大学python编程基础-程序员宅基地

文章浏览阅读317次,点赞7次,收藏7次。大家好,小编为大家解答南开大学本科生入学考试试题的问题。)可供利用并产生效益、与社会生产和活动有关的各种文字、数字、音像、图表、语言等一切信息的总称。信息是反应客观世界中各种事物特征和变化的知识,是数据加工的结果,是有用的数据。)其开发利用可大大减少材料和能源的消耗,减少污染。《信息处理技术》课程期末复习资料。种形态:数字、文本、声音、图像。网上信息的浏览、搜索和下载方法。)无限的、可再生的、可共享的;常用网络通信设备的类别和特征。信息处理与信息处理实务。电子邮件的收发和管理。数据库应用的基本概念。

利用Python开发网络抓包工具_python pyshark-程序员宅基地

文章浏览阅读2.1k次。网络抓包是一种常用的技术手段,用于捕获和分析网络数据包。通过使用Python编程语言,我们可以开发自己的网络抓包工具,以便在网络通信中进行数据分析、安全审计和性能优化。本文将介绍如何利用Python开发一个简单而功能强大的网络抓包工具,并提供详细的步骤和示例代码。_python pyshark

代码表白小特效 一个比一个浪漫 !!!快收藏!!,Web前端高级进阶学习资料-程序员宅基地

文章浏览阅读245次,点赞6次,收藏4次。网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

随便推点

Java+SSM+Vue田径运动会成绩管理系统源码+论文-程序员宅基地

文章浏览阅读285次。队员进入系统前台后可查看系统信息,包括首页、赛前通知、比赛信息以及新闻资讯等,用户要想实现比赛报名等操作,必须登录系统,未有账号的队员可进行注册操作,注册登录后主要功能模块包括个人中心、比赛报名管理、弃权信息管理、特殊队员管理、赛前编排管理、赛中信息管理以及赛事成绩管理。管理员可登录系统后对系统进行全面管理,管理员登陆后主要功能模块包括个人中心、赛前通知管理、裁判员管理、队员管理、比赛信息管理、比赛项目管理、比赛报名管理、弃权信息管理、特殊队员管理、赛前编排管理、赛中信息管理、赛事成绩管理以及系统管理。

Python3实现获取指定日期范围内的月份列表-程序员宅基地

文章浏览阅读1.3w次。import datetimefrom dateutil import rruleclass TimeHelper(): def getMonthRangList(self, start_month, end_month): """ 从开始日期到结束日期查询存在的月份列表,除去本月的数据 :param start_month: ..._python3实现获取指定日期范围内的月份列表

cenos安装配置owncloud过程_owncloud only sqlite is available.install and acti-程序员宅基地

文章浏览阅读1.8k次。1、安装LAMP分别安装,_owncloud only sqlite is available.install and activateadditional php modules

牛客算法入门课(第二课,课后题Laptop,难度2星)_牛客算法课-程序员宅基地

文章浏览阅读1.2k次。牛客算法入门课(第二课,课后题Laptop,难度2星)题目链接时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 131072K,其他语言262144K64bit IO Format: %lld题目描述FST是一名可怜的小朋友,他很强,但是经常fst,所以rating一直低迷。但是重点在于,他非常适合ACM!并在最近的区域赛中获得了不错的成绩。拿到奖金后FST决定买一台新笔记本,但是FST发现,在价格能承受的范围内,笔记本的内存和速度是不可兼得的。可是,有一些笔记本是被另外一些“_牛客算法课

libreoffice安装教程_Win10中LibreOffice 5办公软件怎么下载安装?-程序员宅基地

文章浏览阅读1.6k次。开源办公软件 LibreOffice的版本号升级到了 5!带来了样式实时预览(字处理)、更易用的条件格式(电子表格)等一大堆新特性。如果你想在Win 10上体验新版的LibreOffice,就请接着看下去。图中为LibreOffice的启动画面。软件名称:LibreOffice V7.0.2 官方多国语言安装版 OpenOffice的下一代版本软件大小:269MB更新时间:2020-1..._libreoffice下载教程

Hive特点-程序员宅基地

文章浏览阅读5.9k次,点赞4次,收藏6次。Hive特点1.针对海量数据的高性能查询和分析系统由于 Hive 的查询是通过 MapReduce 框架实现的,而 MapReduce 本身就是为实现针对海量数据的高性能处理而设计的。所以 Hive 天然就能高效的处理海量数据。与此同时,Hive 针对 HiveQL 到 MapReduce的翻译进行了大量的优化,从而保证了生成的MapReduce 任务是高效的。在实际应用中,Hiv..._hive特点

推荐文章

热门文章

相关标签