`
王杲杲
  • 浏览: 44394 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

“学习OO好榜样”之创建类模式

阅读更多

周末再翻《Java与模式》,说说对创建类模式的一点理解。大家交流。

创建类模式,我主要关注的是Simple Factory、Factory Method、Builder这几个。
当然,其他一些模式可能更加常用,比如Singleton、Prototype,但比较简单,不涉及整体脉络,此处略去不述。

首先,说说Simple Factory。
创建类模式,都是对实例创建过程的封装。
Simple Factory,是最容易想到的封装方式,Client无需知道某类的instance是怎么弄出来的,直接跟工厂要实例就行了,而且是静态方法,调用起来也方便。此时,工厂(书中叫做Creator)挑起重担,何时创建什么实例、如何创建全部由他来操办。
当工厂的担子越来越重时,比如,产品种类猛增、各个产品实例的创建过程都比较复杂、判断创建何种产品实例的逻辑也越来越复杂,工厂的改动日趋频繁,而且严重地违反了Open-Close法则,不同产品类的创建代码互相影响,这就说明对变化的封装没有达到应用的效果,产品A的变化影响到了产品B。对Simple Factory的优化产生了Factory Method。

Factory Method。
不同产品的创建过程既然都有着各不相同的单独逻辑,很容易想到把这些各自繁衍的变化封装起来,于是,不同的产品由配套的Creator来创建实例。此时,系统更加复合Open-Cloase法则,增加了新产品,同时增加相应的Creator,他们都位于继承结构的叶子端,不影响枝干和其他兄弟叶子。
但,此时,Client就需要知道哪个产品是使用哪个Creator来获得实例的了。让Client知道得多了,并不一定是坏事,个人感觉这里的情况是更加符合接口隔离原则,获得了该原则带来的优势。

Abstract Factory。
用于产品系列,个人不是很喜欢这个模式。当然也欢迎大家讨论。该模式此处不述。

Builder。
如果某类的实例创建需要固定的几个步骤(我理解为几道工序或者几个零件),想到将生产、组装过程分开(脱开耦合、增加可插入性),再参考Template Method模式的思路,就产生了Builder模式。

再罗索一遍,创建类模式都是对实例创建过程的封装,不同模式适用于不同情况,使用得是否得当我觉得就是看对变化的封装做得好不好。

分享到:
评论
1 楼 ASPGUY 2007-02-08  
AbstractFacotry和FactoryMethod有不同的适用方面。
这里我介绍一下 AbstractFacotry。
对于FactoryMethod,所有的商品都是同一种东西,实现一个身份接口。这时统计具体商品只是一条直线。
但是,这并不能满足所有的情况,比如,对于一个C/S结构的控件来说,我们可以把它们分为文本框、下拉框、滚动条等等,这是按照使用分类;但是,我们还可以按照操作系统分类,比如Windows的各种控件、Unix的各种组件。
这样,我用代码写一下看看。
public interface 文本框{}
public interface 下拉框{}
public class Windos文本框{...}
public class Windos下拉框{...}
public class Unix文本框{...}
public class Unix下拉框{...}
public abstract class AbstractFactory{
  public abstract 下拉框 get下拉框();
  public abstract 文本框 get文本框();
}
public class WindowsFactory extends AbstractFactory{
  public 下拉框 get下拉框(){ return new Windows下拉框();}
  public 文本框 get文本框(){ return new Windows文本框();}
}
同理public class UnixFactory extends AbstractFactory{...}
因此,可以看到,对FactroyMethod的具体商品的管理是一条直线,而对AbstractFacotry的具体商品的管理是一个二维表。
但是,需要指出的是AbstractFactory是一种倾斜的“开闭”,即,如果增加一种操作系统,非常容易,可以不修改原来的代码,但是如果每种操作系统都要增加一种控件,就需要所有的具体工厂和抽象工厂。
以上,就是我对AbstractFactory的理解,希望大家斧正。

相关推荐

    学习oo好榜样(设计良品)

    【学习oo好榜样(设计良品)】 设计良好的软件代码是每个程序员追求的目标,而避免“Bad Smells”(不良代码气味)并进行重构是实现这一目标的重要手段。本篇文章将探讨两个重要的代码质量指标——重复的代码...

    OO中对于23种设计模式的整理

    抽象工厂模式提供了一种创建对象的方法,使得客户类和工厂类分开,把各种需要使用到的实例的创建方法统一单独写成抽象类,实现类具体实现创建过程,创建出来的对象类型用接口来表示,抽象工厂可以用在高层类中使用,...

    23种设计模式,OO思想

    这23种设计模式分为三大类:创建型模式、结构型模式和行为型模式,每一种都旨在解决特定类型的问题,提高代码的复用性、灵活性和可维护性。 ### 创建型模式 1. **Factory模式**:提供了一个创建对象的接口,但允许...

    23个设计模式标准OO结构

    在面向对象编程(Object-Oriented Programming, OOP)领域,23种设计模式被视为标准集合,这些模式被分类为创建型、结构型和行为型三大类。 创建型设计模式关注于对象的创建,它们提供了一种方式来控制实例化过程,...

    SAP ABAP开发学习——第10课:OOALV(视频教程)

    通过本课程的学习,你将掌握如何利用OOALV来创建功能强大的数据展示界面,提高SAP系统的用户体验。视频教程、PPT和作业将帮助你深入理解每个概念,并提供实践机会。确保充分利用这些资源,以加深对SAP ABAP和OOALV的...

    OO设计和伪状态模式实现的控制台五子棋游戏

    在本项目中,"OO设计和伪状态模式实现的控制台五子棋游戏"是一个用C#编程语言实现的控制台应用程序,旨在教授面向对象编程(Object-Oriented Programming, OOP)和设计模式,特别是状态模式的应用。下面将详细阐述...

    ABAP OOALV学习文档

    ### ABAP OOALV 学习文档详析 #### 一、ABAP OOALV 概述 **ABAP OOALV**(Object-Oriented Application List Viewer)是一种用于SAP系统的高级列表显示技术,主要用于生成复杂的报表和列表视图。自R/3 4.6C版本起...

    5-互评-OO之接口-DAO模式代码阅读及应用

    总结来说,"5-互评-OO之接口-DAO模式代码阅读及应用"这个主题涵盖了Java开发中的关键知识点,包括接口的概念及其在实现模块间契约中的作用,以及DAO模式在数据访问层的设计和实现。理解并熟练应用这些知识对于提升...

    浅谈CSS编程的OOCSS和SMACSS设计模式

    在CSS编程中,OOCSS(Object-Oriented CSS)和SMACSS(Scalable and Modular Architecture for CSS)是两种重要的设计模式,它们旨在提高CSS代码的可维护性和可扩展性。这两种模式都是为了优化CSS编写方式,降低对...

    java设计模式之面向对象的思想(think in OO(Object Oriented))

    1. 工厂模式(Factory Pattern):工厂模式是一种创建型设计模式,它提供了一个创建对象的接口,但让子类决定实例化哪一个类。这将类的实例化过程延迟到子类进行,增强了程序的可扩展性。 2. 单例模式(Singleton ...

    oo 面向对象action

    这可能包括如何定义类,创建对象,以及如何利用面向对象的设计模式来优化代码结构。 标签中的“另类其它”可能暗示这个资源包含了一些非主流或者不常见的面向对象设计模式或实践。“控件”可能是指在GUI(图形用户...

    oodesign pattern

    面向对象设计模式通常分为三类:创建型模式、结构型模式和行为型模式。 1. **创建型模式**: - 单例模式:确保一个类只有一个实例,并提供一个全局访问点。 - 工厂模式:提供一个接口用于创建相关或依赖对象的...

    vb-oo.rar_oo_vb类

    在`vb-oo.rar`这个压缩包中,你可能会找到关于如何在VB中创建和使用类、实现多态、继承和封装的详细示例代码。通过学习这些示例,你可以深入理解VB的面向对象编程,并提升你的编程技能。记得解压文件并逐个查看,...

    设计模式课件大全

    设计模式03-创建型模式 设计模式04-创建型模式2 设计模式05-建造者、原型模式 设计模式06-适配器、桥接、组合模式 设计模式07-组合模式、装饰模式 设计模式09-外观模式、享元模式 设计模式10-代理模式、结构型模式大...

    实战OO的pdf自留备份

    最后的"开启征程结尾篇"可能是一个结语或者后记,鼓励读者将所学应用到实际项目中,开始他们的OO编程实践之旅。 在标签中提到的"类图"是UML(统一建模语言)的一种图表,用于表示类的结构和关系,包括类的属性、...

    OO4O简介以及其在VC++中的应用

    2. **创建会话**:使用`Oo4oSession`类创建一个新的会话对象。 3. **准备SQL命令**:通过`Oo4oCommand`对象设置SQL语句。 4. **执行命令**:调用`execute`方法执行SQL语句。 5. **处理结果**:利用`Oo4oResultSet`类...

    OOALV常用功能完整简例

    通过学习和理解这些知识点,开发者可以更好地掌握如何在SAP系统中创建和使用面向对象的ALV报表,为用户提供功能丰富、界面友好的报表解决方案。同时,开发者还能够对报表进行个性化定制,以满足企业内部的特定需求,...

    基于信息化教学时代背景下高职院校OO混合式教学模式设计研究.docx

    【基于信息化教学时代背景下高职院校OO混合式教学模式设计研究】 在信息化教学时代,高职院校的教学方式正在经历深刻的变革。O2O(Online to Offline)混合式教学模式,结合线上和线下教学,成为提升教学质量的有效...

    OO与设计模式

    软件工程软考认证,Java与设计模式,下午必考题,24种设计模式

    ABAP OOALV报表开发

    ABAP OOALV报表开发,定义变量,选择屏幕定义,创建类,调用函数

Global site tag (gtag.js) - Google Analytics