设计模式 抽象工厂
来源:互联网 发布:php exec bat 编辑:程序博客网 时间:2024/04/26 11:05
抽象工厂类似于工厂方法,只不过是创建多种产品,比如显卡分为三星的,华硕的,东芝的。而声卡也分为三星的,华硕的,东芝的,那么我们可以创建一个抽象工厂,它的子类是三星工厂,华硕工厂,东芝工厂,每个工厂有两个方法,分为生产自己品牌的显卡和声卡。
在运行的时候,创建一个ConcreteFactory实例,那么具体的工厂再创建具有特定实现的产品对象,也就是说,为创建不同的产品对象,客户端应该使用不同的具体工厂。最大的好处在于可以方便的交换产品系列,在一个应用中只要初始化的时候出现一次,只要改变具体的工厂即可使用不同的产品配置,而且我们客户端完全看不到具体实现,拿到的产品都是抽象的,方便我们利用多态。只是还有缺憾:因为我们的ConcreteFactory不一定是全局单实例的,如果不是单实例的,那么程序中可能会有多次实例化工厂,进而拿到具体的产品,这样如果我们哪一天换掉了实现,那么肯定遍布程序的具体工厂都要改,这非常丑陋。
现在我们运用反射。将具体的工厂名字放在配置文件里。具体做法如下:
这个东东实际上是用简单工厂+抽象工厂。简单工厂主要用来动态生成一个子类,向外暴露一个基类,而抽象工厂用来构造来给简单工厂使用的抽象层次,简单工厂的if-else可以考虑用反射技术来去除。
工厂方法和抽象工厂基本是一样的。
这样我们去除了if-else,而且我们的程序,连具体的工厂也看不见了,完全基于抽象来编程
- 抽象工厂设计模式
- 设计模式-----抽象工厂
- 抽象工厂设计模式
- 抽象工厂设计模式
- 抽象工厂设计模式
- 设计模式 抽象工厂
- 设计模式--抽象工厂
- 设计模式--抽象工厂
- 设计模式 抽象工厂
- 设计模式-抽象工厂
- 设计模式-> 抽象工厂
- 抽象工厂设计模式
- 设计模式--抽象工厂
- 【设计模式】抽象工厂
- 设计模式---抽象工厂
- 【设计模式-抽象工厂】
- 设计模式-抽象工厂
- 设计模式--抽象工厂
- iPhone: There is no SDK with the name or path 'iphoneos3.0'
- MYSQL中默认隐式事务及利用事务DML
- Red Hat Linux下安装JDK
- X86寄存器简述
- linux下的QQ安装、使用方法
- 设计模式 抽象工厂
- 内核宏ALIGN的含义
- Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
- Android 自定义控件的 拖拽、移动 实现 方法
- C++类模板的三种特化类型
- SQL Server 数据类型详解
- CFS 调度器学习笔记
- BT4---RTL8192se---(待测)-----(11.4.17晚RTL8192se 实测 成功 !膜拜原作者)
- EmacsNote01