今天的Factory Method和上一篇Singleton同样都属於Creational Pattern,常运用於一定规模以上的程序中,现在就来认识它吧!
想像一下,一开始的应用程序只可以接受现金支付,但随着科技的进步,大众的消费方式也逐渐多元化,这时只能接受现金支付的应用程序为了跟上消费者的需求,就必须整合其他支付方式到应用程序中。
但是大多数的程序都与「现金」这个类别耦合,如果要新增其他类别,就必须得完整改过有关支付功能程序,才能够整合完另一种之支付方式,维护成本相当高。 倘若日後又要新增其他类别,到最後程序码看起来肯定非常混乱且许多地方重复。
使用工厂方法的话,会将「支付方式」作为一个工厂类别,而「支付的东西」作为产品的介面,不同的支付方式就会由不同的「支付工厂」(像是现金支付、LINE PAY、APPLE PAY等)去创建对应的「支付的东西」(像是现金、LINE PAY的QRcode、APPLE PAY感应等)。
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();
}
}
如果希望程序可以方便扩展内部组件的方法的话,使用工厂方法就可以满足此需求,也可以避免重复的程序码在应用程序运作中工作,以节省系统的资源。
除此之外,也欢迎大家走走逛逛关於我们团队夥伴的文章
juck30808 - Python - 数位行销分析与 Youtube API 教学
SiQing47 - 前端?後端?你早晚都要全端的,何不从现在开始?
<<: [Day 9]阿嬷都看得懂的基础 CSS 样式-文字篇与标签换行 bug
在讨论MLOps的过程当中,许多客户会针对他们有兴趣的事情提出不同的问题,像是:模型监测、安全性、常...
似乎没有简单的方法可以通过 Microsoft MB-300 考试。据说这次考试成功的秘诀有三个。有...
紧张紧张,刺激刺激,从去年下半年才参加UI/UX设计班的菜逼八,今年居然就自不量力的参加传说中的铁人...
今天我们要介绍 EC2 搭配 EBS 储存资源的实际操作,那我们开始吧! 建立 VPC 环境 我们...
昨天我们做到ImageView及TextField会根据Slider的左右滑动而改变颜色及数值,但是...