本文共 1968 字,大约阅读时间需要 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)是实现类与接口之间的桥梁。上转型对象具有以下特点:
定义:上转型对象是指将一个对象赋值给一个基类或接口,基类可以调用子类继承或重写的方法。
特点:
注意事项:
抽象工厂模式通过上转型对象的实现,实现了系统的高扩展性和灵活性,充分发挥了闭合性原则的优势。这种设计方式在需要频繁扩展功能或维护不同实现类的情况下,展现出显著的优势。
转载地址:http://wqfbz.baihongyu.com/