设计模式系列(二)简单工厂模式与工厂方法模式
发布日期:2021-07-23 22:22:37
浏览次数:1
分类:技术文章
本文共 1531 字,大约阅读时间需要 5 分钟。
参考:
工厂模式分为三种
一:简单工厂模式(Simple Factory Pattern)
包括三个角色:
Factory :工厂角色
Product:抽象产品角色
ConcreteProduct:具体产品角色
具体产品角色实现抽象产品橘色,工厂类则负责produce
示例代码:
main
public class Test { public static void main(String args) { Factory.produce("A").doSomeThing(); }}
interface Base{ void doSomeThing(); }
class A implements Base { public void doSomeThing(){} }
class B implements Base { public void doSomeThing(){} }
factory
public class Factory { public static Base produce(String type) { if ("A".equals(type)) { return new A(); } else if("B".equals(type)) { return new B(); } else { return null; } } }
要点:某个类只能有一个实例,提供一个全局的访问点 (或者是静态方法也行)
二 工厂方法模式(Factory Method Pattern)
简单工厂模式如果要新增一种产品种类的话,需要修改工厂,这违悖了开闭原则,
而工厂方法模式则抽象出来工厂类,将工厂类的具体实现交给子类来实现,这样如果新增产品的话,只要
增加一个工厂即可
角色:
Product:抽象产品
ConcreteProduct:具体产品
Factory:抽象工厂
ConcreteFactory:具体工厂
代码
产品:
class A implements Base { public void doSomeThing(){} } class B implements Base { public void doSomeThing(){} }interface Base{ void doSomeThing(); }
工厂:
public class FactoryA implements Factory{ public Base produce(String type) { if ("A".equals(type)) { return new A(); } else { return null; } } } public class FactoryB implements Factory{ public Base produce(String type) { if("B".equals(type)) { return new B(); } else { return null; } } }public interface Factory { Base produce(String type);}
main
public class Test { public static void main(String args) { Factory a = new FactoryA(); a.produce("A").doSomeThing(); }}
转载地址:https://blog.csdn.net/perfectnihil/article/details/91350445 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年03月21日 05时39分54秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
JavaScript 操作 HTML DOM
2019-04-26
实训中学到的HTML基础知识(1)
2019-04-26
实训中学到的HTML基础知识(2)
2019-04-26
实训中学到的HTML基础知识(3)
2019-04-26
实训中学到的HTML基础知识(4)
2019-04-26
实训中学到的HTML基础知识(5)
2019-04-26
实训中学到的HTML基础知识(6)
2019-04-26
JAVA SE之面向对象10:集合1
2019-04-26
排序算法整理2:选择排序及其时间与空间复杂度的计算
2019-04-26
JAVA SE之面向对象14:IO流的基础
2019-04-26
Handler+Looper+MessageQueue+Message机制分析
2019-04-26
Android窗口机制
2019-04-26
Java并发编程之线程、多线程和线程池专题
2019-04-26
购买了新域名后怎么办?域名有哪些方向?
2019-04-26
哪类数字域名更优秀?数字域名价值高吗?
2019-04-26
入手域名贵吗?域名注册价格和续费价格是多少钱?
2019-04-26
卡特兰数(Catalan Numbers) 题单
2019-04-26
Android中获取视频的缩略图
2019-04-26
Android之Notification详解
2019-04-26