IT铁人DAY 9-Factory Method 工厂方法

  今天的Factory Method和上一篇Singleton同样都属於Creational Pattern,常运用於一定规模以上的程序中,现在就来认识它吧!


问题情境与解析

  想像一下,一开始的应用程序只可以接受现金支付,但随着科技的进步,大众的消费方式也逐渐多元化,这时只能接受现金支付的应用程序为了跟上消费者的需求,就必须整合其他支付方式到应用程序中。

  但是大多数的程序都与「现金」这个类别耦合,如果要新增其他类别,就必须得完整改过有关支付功能程序,才能够整合完另一种之支付方式,维护成本相当高。 倘若日後又要新增其他类别,到最後程序码看起来肯定非常混乱且许多地方重复。

  使用工厂方法的话,会将「支付方式」作为一个工厂类别,而「支付的东西」作为产品的介面,不同的支付方式就会由不同的「支付工厂」(像是现金支付、LINE PAY、APPLE PAY等)去创建对应的「支付的东西」(像是现金、LINE PAY的QRcode、APPLE PAY感应等)。

Class Diagram

https://ithelp.ithome.com.tw/upload/images/20210924/201407432rDIXH2685.png

Skeleton Code

interface Product {
    void doSomething();
}

class ProductA implements Product {
    public void doSomething() {
        // work
    }
}

class ProductB implements Product {
    public void doSomething() {
        // work
    }
}

abstract class Factory {
    abstract Product cteateProduct();
}

class FactoryA extends Factory {
    public Product cteateProduct() {
        return new ProductA();
    }
}

class FactoryB extends Factory {
    public Product cteateProduct() {
        return new ProductB();
    }
}  

  如果希望程序可以方便扩展内部组件的方法的话,使用工厂方法就可以满足此需求,也可以避免重复的程序码在应用程序运作中工作,以节省系统的资源。


除此之外,也欢迎大家走走逛逛关於我们团队夥伴的文章

lu23770127 - SASS 基础初学三十天

10u1 - 糟了!是世界奇观!

juck30808 - Python - 数位行销分析与 Youtube API 教学

SiQing47 - 前端?後端?你早晚都要全端的,何不从现在开始?


<<:  [Day 9]阿嬷都看得懂的基础 CSS 样式-文字篇与标签换行 bug

>>:  DAY10支持向量机

ML专案的特徵工程为什麽存在?包含哪些层面?怎麽练手感?

在讨论MLOps的过程当中,许多客户会针对他们有兴趣的事情提出不同的问题,像是:模型监测、安全性、常...

使用准确的 Microsoft MB-300 考试转储立即成功

似乎没有简单的方法可以通过 Microsoft MB-300 考试。据说这次考试成功的秘诀有三个。有...

Day1 参赛前言

紧张紧张,刺激刺激,从去年下半年才参加UI/UX设计班的菜逼八,今年居然就自不量力的参加传说中的铁人...

Day 12 运算宝石:【Lab】EC2储存资源 EBS Volume 建立与使用 (上)

今天我们要介绍 EC2 搭配 EBS 储存资源的实际操作,那我们开始吧! 建立 VPC 环境 我们...

【从零开始的Swift开发心路历程-Day7】简易调色盘Part3(完)

昨天我们做到ImageView及TextField会根据Slider的左右滑动而改变颜色及数值,但是...