本文是个系列一次会出两个设计者模式作用,如果有关联就三个,除此外还会讲解在spring中作用。
我们都知道设计者模式有3类23种设计模式,标红是特别重要的设计者模式建议都会,而且熟读于心,标蓝是指其次重要建议也要明白。
(1)创建型模式:单例模式、抽象工厂模式、构建者模式、工厂模式、原型模式。
(2)结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
(3)行为型模式:访问者模式、模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式。
说白我感觉只要一个接口,多次impl在实现,只要是实现一个想要结果,这种写法都可以叫做工厂。
?
Spring 使用工厂模式通过 BeanFactory 和 ApplicationContext 创建对象。这提供了一种灵活的方式来管理依赖关系。
简单说呢就是多重功能能力实现就叫抽象工厂
public interface Shape {
void draw();
}
public class RoundedRectangle implements Shape {
public void draw() {
System.out.println("Inside RoundedRectangle::draw() method.");
}
}
public interface ShapeFactory {
Shape createShape();
}
public class RoundedRectangleFactory implements ShapeFactory {
public Shape createShape() {
// 调用其他实现类,实现其他功能
return new RoundedRectangle();
}
}
public class FactoryProducer {
public static ShapeFactory getFactory(boolean rounded){
if(rounded){
return new RoundedRectangleFactory();
} else {
return new RectangleFactory();
}
}
}
在 Spring 中,BeanFactory?提供了基本的依赖注入功能,并可以看作是工厂模式的实现。它主要负责创建和管理 bean,客户端通过 getBean 方法获取对象实例。
而 ApplicationContext 是 BeanFactory 的超集,提供了更全面的功能。它不仅包括工厂模式的特性(即创建对象),还提供了许多企业级的支持,这使得 ApplicationContext 更接近于抽象工厂模式的实现。ApplicationContext 能够管理并创建一系列相关的对象,并提供了框架级的服务。
我觉得工厂和抽象工厂更像是理念上产物,如果一个类的实现,具有抽象工厂和工厂的特征,可以说他是抽象工厂好工厂也行。抽象工厂可以理解为是更高阶的工厂,工厂可能产出就是一个对象抽象具有多种能力。反正我是这么理解的如果不对你可以评论留言。
抽象工厂模式更适合于创建多个相关或相互依赖的产品,也可以理解是工厂升级版,你看下面列子除了有Button 还有Checkbox ,而工厂方法模式更适合于一个产品但是有多个实现的情况。
假设我们有一个应用,需要创建跨平台的 UI 组件(如按钮和复选框),这些组件在 Windows 和 MacOS 上有不同的样式:
public interface GUIFactory {
Button createButton();
Checkbox createCheckbox();
}
public class WinFactory implements GUIFactory {
public Button createButton() {
return new WinButton();
}
public Checkbox createCheckbox() {
return new WinCheckbox();
}
}
public class MacFactory implements GUIFactory {
public Button createButton() {
return new MacButton();
}
public Checkbox createCheckbox() {
return new MacCheckbox();
}
}
在这个示例中,GUIFactory?是一个抽象工厂,定义了创建按钮和复选框的方法。WinFactory?和 MacFactory?是具体的工厂,分别创建 Windows 和 MacOS 风格的组件。
使用工厂方法模式,说明下和abstract 无关,其实工厂就是多种实现罢了:
public abstract class DBConnectionFactory {
abstract Connection createConnection();
}
public class MySqlConnectionFactory extends DBConnectionFactory {
public Connection createConnection() {
// 创建 MySQL 连接
}
}
public class OracleConnectionFactory extends DBConnectionFactory {
public Connection createConnection() {
// 创建 Oracle 连接
}
}
------------------------------------------与正文内容无关------------------------------------
如果觉的文章写对各位读者老爷们有帮助的话,麻烦点赞加关注呗!作者在这拜谢了!
如果你需要Java 、Python毕设、网页和系统设计,还有你是刚入职的新手需要度过试用期。联系方式微信:Romanticl99 网名:A乐神