工厂模式
工厂模式是一种常见的设计模式,它属于创建型模式。工厂模式通过将对象的实例化过程封装起来,使得客户端无需关心对象的创建,而只需要使用使用它即可。该模式能够降低代码的复杂性和耦合度,提高了系统的可维护性和可扩展性,是一种非常实用的模式。
简单工厂模式
简单工厂模式是工厂模式的一种特例,它通过增加一个工厂类,将所有产品的创建过程封装在工厂类中,由工厂类返回对应的具体产品实例。简单工厂模式的实现比较简单,但是缺点在于所有的产品类都需要聚合在一个工厂类中,当新加入一个产品类时,需要修改工厂类的代码,违反了“开闭原则”。
工厂方法模式
工厂方法模式通过将具体的工厂类封装在抽象工厂中,使得客户端只和抽象工厂交互。具体的工厂类负责创建具体的产品类,但是具体的实例化操作在工厂类中并不实现,而是由具体的产品类去实现。工厂方法模式相对于简单工厂模式,优点在于增加新的产品时无需修改抽象工厂类代码,而只需要增加一个具体的工厂类和相应的产品类即可,符合“开闭原则”。
抽象工厂模式
抽象工厂模式是工厂方法模式的扩展,它通过增加一个抽象工厂,将具体工厂类抽象出来,使得抽象工厂中可以创建多个产品组,而工厂方法模式只能创建一个产品。抽象工厂模式相对于工厂方法模式,在实现时更为复杂,但也具有更多的灵活性和可扩展性。
Java示例
以工厂方法模式为例,我们来演示一下工厂模式。假设我们需要创建一个手机类,它可以是苹果、三星、华为等类型的手机,同时我们需要这些手机都具有统一的属性和方法。我们首先定义一个抽象类Phone
:
public abstract class Phone {
public abstract void make();
}
然后,我们可以定义具体的手机类IPhone
、SamsungPhone
和HuaweiPhone
,继承自Phone
抽象类,并实现make
方法:
public class IPhone extends Phone{
public void make(){
System.out.println("IPhone is made.");
}
}
public class SamsungPhone extends Phone{
public void make(){
System.out.println("SamsungPhone is made.");
}
}
public class HuaweiPhone extends Phone{
public void make(){
System.out.println("HuaweiPhone is made.");
}
}
接着,我们定义一个工厂抽象类PhoneFactory
,它负责创建具体手机的实例对象:
public abstract class PhoneFactory {
public abstract Phone createPhone();
}
然后,我们定义具体的工厂类,如IPhoneFactory
、SamsungPhoneFactory
和HuaweiPhoneFactory
等,继承自PhoneFactory
抽象类,并实现createPhone
方法,返回相应的具体手机实例:
public class IPhoneFactory extends PhoneFactory{
public Phone createPhone(){
return new IPhone();
}
}
public class SamsungPhoneFactory extends PhoneFactory{
public Phone createPhone(){
return new SamsungPhone();
}
}
public class HuaweiPhoneFactory extends PhoneFactory{
public Phone createPhone(){
return new HuaweiPhone();
}
}
最后,在客户端代码中,我们可以使用具体的工厂类来创建具体的手机实例:
PhoneFactory factory = new IPhoneFactory();
Phone phone = factory.createPhone();
phone.make();
这样就完成了工厂方法模式的Java演示。
优点和缺点
优点:
- 工厂模式将对象的创建和使用分离,降低了客户端与具体实现类的耦合度,提高了系统的灵活性和可维护性;
- 工厂模式能够在一个系统中为不同的具体产品提供同一个抽象接口,使得客户端更加方便地使用这些产品;
- 工厂模式能够保证系统中的每个具体产品都具有相同的接口和属性,使得系统更加易于扩展和维护。
缺点:
- 工厂模式每增加一个产品都需要增加一个对应的具体工厂类,导致系统中的工厂类的数量增加,代码复杂度增大;
- 工厂模式虽然降低了客户端与具体实现类的耦合度,但是增加了抽象层,导致系统更加抽象和难以理解和把握;
- 工厂模式将创建具体产品的任务全部交给工厂类,使得工厂类承担了太多的责任,增加了工厂类的复杂度和难度。
综上所述,工厂模式是一种非常实用的设计模式,它能够为系统提供灵活性、可维护性和可扩展性。在使用时,需要根据具体的情况进行选择,遵循相应的规范和要求,才能发挥出工厂模式的优点。
- 本文链接: http://maltose.top/archives/23-zhong-she-ji-mo-shi---gong-chang-mo-shi
- 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!