java 工厂模式(大话设计模式)
发布日期:2021-05-19 21:35:52 浏览次数:20 分类:精选文章

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

工厂方法模式(Factory Method)是一种经典的设计模式,用于将对象的创建athorized推迟到子类或者某一外部机制,从而松散coupled对象与其创建逻辑。这种模式的核心思想是定义一个用于创建对象的接口,具体实例由各个子类去实现,从而遵循"开放-封闭原则",既能扩展,又能保持开闭的状态。

简单工厂模式虽然实现了类的静态工厂方法,能够通过装饰着者模式实现缺省值的功能,但其存在一个明显缺陷:如果需要增加新的类,必然需要修改工厂接口及其实现类的方法,这违背了"开放-封闭原则"。工厂方法模式则解决了这一问题,它将简单工厂的内部逻辑判断转移到客户端代码中进行,更灵活地遵循"开放-封闭原则"。

工厂方法模式不仅能够满足基本的工厂功能,还可以通过抽象工厂和多个具体工厂的结合,实现更高层次的工厂逻辑。这种模式在大型应用系统中表现优异,因为它能够在保持系统对变化的灵活性和适应性的同时,降低对单个工厂类的过度依赖。

接下来的示例将帮助你更好地理解工厂方法模式的实现方式。假设我们有一个需要创建不同类型的"雷锋"类(LeiFeng)的场景,每个类有不同的工作任务。我们可以通过工厂模式来实现这些类的创建。

** LeiFeng 类及其子类定义**:

public interface LeiFeng {
void sweep();
void wash();
void buyRice();
}
public abstract class LeiFong {
protected LeiFong(String name) {
//初始化
}
//抽象方法,具体由子类实现
public abstract void sweep();
public abstract void wash();
public abstract void buyRice();
}

** Leifong工厂接口**:

public interface IFactory {
LeiFong createLeiFong();
}

具体工厂实现

public class UndergraduateFactory implements IFactory {
@Override
public LeiFong createLeiFong() {
return new Undergraduate();
}
}
public class VolunteerFactory implements IFactory {
@Override
public LeiFong createLeiFong() {
return new Volunteer();
}
}

具体产品实现

public class Undergraduate extends LeiFong {
public Undergraduate(String name) {
super(name);
System.out.println("大学生雷锋被创建");
}
@Override
public void sweep() {
System.out.println("大学生雷锋帮忙扫地");
}
@Override
public void wash() {
System.out.println("大学生雷锋帮忙洗衣");
}
@Override
public void buyRice() {
System.out.println("大学生雷锋帮忙买米");
}
}
public class Volunteer extends LeiFong {
public Volunteer(String name) {
super(name);
System.out.println("社区志愿者雷锋被创建");
}
@Override
public void sweep() {
System.out.println("社区志愿者帮忙扫地");
}
@Override
public void wash() {
System.out.println("社区志愿者帮忙洗衣");
}
@Override
public void buyRice() {
System.out.println("社区志愿者帮忙买米");
}
}

客户端代码(Main类):

public class Client {
public static void main(String[] args) {
//创建大学生雷锋
IFactory undergraduateFactory = new UndergraduateFactory();
LeiFong student = undergraduateFactory.createLeiFong();
student.sweep();
student.wash();
student.buyRice();
//创建社区志愿者
IFactory volunteerFactory = new VolunteerFactory();
LeiFong volunteer = volunteerFactory.createLeiFong();
volunteer.sweep();
volunteer.wash();
volunteer.buyRice();
}
}

在工厂方法模式中,抽象工厂 creataLeiFong()方法返回一个 LeiFong 实例。通过这种方式,每个具体工厂可以选择返回不同的子类实例,从而实现系统的灵活性和可扩展性。此外,这种设计使得客户端代码仅需关注对象的使用,而无需直接参与对象的创建过程,这种方式更符合面向接口的设计原则。在实际应用中,可以通过动态加载或配置文件等方式注册新的工厂类,从而无需修改现有的工厂接口。

上一篇:java 原型模式(大话设计模式)
下一篇:java 装饰模式(大话设计模式)

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2025年04月21日 10时44分46秒