关于抽象工厂模式的一些见解
2022/7/26 6:52:58
本文主要是介绍关于抽象工厂模式的一些见解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
代码:
CoffeStore(咖啡店类)
public class CoffeStore { private CoffeFactory coffeFactory; public void setCoffeFactory(CoffeFactory coffeFactory) { this.coffeFactory = coffeFactory; } Coffe orderCoffe(){ return coffeFactory.createCoffe(); } }
CoffeFactory(咖啡工厂抽象类)
public abstract class CoffeFactory { abstract Coffe createCoffe(); }
Coffe(咖啡抽象类)
public abstract class Coffe { }
AmericanCoffe(美式咖啡类)
public class AmericanCoffe extends Coffe{ }
AmericanCoffeFacotry(美式咖啡工厂类)
public class AmericanCoffeFactory extends CoffeFactory{ @Override Coffe createCoffe() { return new AmericanCoffe(); } }
客户端
public class Client { public static void main(String[] args) { CoffeStore coffeStore = new CoffeStore(); coffeStore.setCoffeFactory(new AmericanCoffeFactory()); System.out.println(coffeStore.orderCoffe()); } }
首先:看到这个代码一定很疑惑,既然用户端直接new了一个咖啡工厂类,为什么不直接调用咖啡工厂的create方法生成一个coffe对象,但是可以试想一下,咖啡店假如还要对咖啡工厂生成的咖啡再进行一次加工(加冰/加糖)
再者,我们不应该把客户端和咖啡店想成一体的,可以大胆把除Client类的其他java类想象成一个java框架,框架的作用是提供coffe对象,不会有人用mybatis的时候自己用动态代理来生成一个mapper。感觉说的有点迷糊
总的来说:
给咖啡店一个setCoffeFactory方法,减少了咖啡店和咖啡工厂的耦合,咖啡店只需要取调用咖啡工厂的create方法生成咖啡,只需要关心咖啡进一步加工这一业务,而不需要关心咖啡工厂是什么,而咖啡工厂只需要关心咖啡对象的生成。如果需要新增一个类型的咖啡,只需要再添加一个咖啡类和咖啡工厂类,但之前的代码却完全不需要改变(client不算做之前的代码),这样做符合开闭原则
这篇关于关于抽象工厂模式的一些见解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-22[开源]10.3K+ Star!轻量强大的开源运维平台,超赞!
- 2024-11-21Flutter基础教程:新手入门指南
- 2024-11-21Flutter跨平台教程:新手入门详解
- 2024-11-21Flutter跨平台教程:新手入门与实践指南
- 2024-11-21Flutter列表组件教程:初学者指南
- 2024-11-21Flutter列表组件教程:新手入门指南
- 2024-11-21Flutter入门教程:初学者必看指南
- 2024-11-21Flutter入门教程:从零开始的Flutter开发指南
- 2024-11-21Flutter升级教程:新手必读的升级指南
- 2024-11-21Flutter升级教程:轻松掌握Flutter版本更新