博客
关于我
java设计模式(三)--抽象工厂模式
阅读量:463 次
发布时间:2019-03-06

本文共 1926 字,大约阅读时间需要 6 分钟。

工厂方法模式的局限性及抽象工厂模式的解决方案

在软件设计中,工厂方法模式(Factory Method)是一个常用的设计模式。它通过将对象的创建权从客户端转移到工厂类,实现了对象创建的抽象化。然而,这一模式存在一个明显的缺陷:当需要扩展程序功能时,通常需要修改工厂类的代码,这违背了闭包原则,降低了系统的扩展性。

为了解决这一问题,抽象工厂模式(Abstract Factory Pattern)提供了一种更为灵活的解决方案。通过创建多个工厂类,每个工厂类负责生产特定的产品。这种设计允许我们在不修改现有代码的情况下,通过添加新的工厂类来扩展系统功能。

接口与实现类的创建

在抽象工厂模式中,首先需要定义一个接口来规范生产的产品。以下是发送接口的定义:

public interface Sender {    public String send();}

接下来,实现该接口的两个具体类,分别对应不同的功能:

public class MailSender implements Sender {    @Override    public String send() {        System.out.println("This is emailSender!");        return "email";    }}public class SmsSender implements Sender {    @Override    public String send() {        System.out.println("This is SmsSender!!");        return "sms";    }}

工厂接口与实现类的创建

为了统一管理不同类型的发送器,我们需要定义一个工厂接口,规范工厂类的操作方式:

public interface Provider {    public Sender produce();}

然后,实现该工厂接口的两个具体类,分别对应不同的发送器类型:

public class MailSendFactory implements Provider {    @Override    public Sender produce() {        return new MailSender();    }}public class SmsSendFactory implements Provider {    @Override    public Sender produce() {        return new SmsSender();    }}

测试与验证

通过测试类可以验证工厂模式的实现是否正确:

public class ProviderTest {    private Provider provider;    @Test    public void testMailProduce() throws Exception {        provider = new MailSendFactory();        Sender sender = provider.produce();        assertEquals("email", sender.send());    }    @Test    public void testSmsProduce() throws Exception {        provider = new SmsSendFactory();        Sender sender = provider.produce();        assertEquals("sms", sender.send());    }}

上转型对象的概念

在抽象工厂模式中,上转型对象(Upcasting Object)是实现类与接口之间的桥梁。上转型对象具有以下特点:

  • 定义:上转型对象是指将一个对象赋值给一个基类或接口,基类可以调用子类继承或重写的方法。

  • 特点

    • 可以操作子类继承或重写的成员变量和方法。
    • 可以调用子类新增加的方法。
    • 可以通过强制转换获得子类的全部属性和功能。
  • 注意事项

    • 接口定义的权限应设置为public,因为继承体系的权限不能缩小。
    • 子类或实现类赋值给基类时,基类只能操作基类自身和子类重写的部分。
  • 抽象工厂模式通过上转型对象的实现,实现了系统的高扩展性和灵活性,充分发挥了闭合性原则的优势。这种设计方式在需要频繁扩展功能或维护不同实现类的情况下,展现出显著的优势。

    转载地址:http://wqfbz.baihongyu.com/

    你可能感兴趣的文章
    OS第2章 —— 进程
    查看>>
    OS第3章 —— 进程调度和死锁
    查看>>
    OS第5章
    查看>>
    OS第6章 —— 设备管理
    查看>>
    OTA测试
    查看>>
    Oulipo
    查看>>
    Outlook 2010 Inside Out
    查看>>
    overlay(VLAN,VxLAN)、underlay网络、大二层概述
    查看>>
    OWASP漏洞原理<最基础的数据库 第二课>
    查看>>
    OWL本体语言
    查看>>
    P with Spacy:自定义文本分类管道
    查看>>
    P-DQN:离散-连续混合动作空间的独特算法
    查看>>
    P1035 I need help
    查看>>
    P1073 最优贸易
    查看>>
    P1364 医院设置
    查看>>
    P1865 A % B Problem
    查看>>
    P2260 [清华集训2012]模积和
    查看>>
    P3203 [HNOI2010]弹飞绵羊 —— 懒标记?分块?
    查看>>
    P4313 文理分科
    查看>>
    SpringBoot中集成LiteFlow(轻量、快速、稳定可编排的组件式规则引擎)实现复杂业务解耦、动态编排、高可扩展
    查看>>