长虹电视长虹怎么退出工厂模式简化模式?

Sunny软件公司开发人员发現在创建具体Chart对象时每更换一个Chart对象都需要修改客户端代码中静态工厂方法的参数,客户端代码将要重新编译这对于客户端而言,违反了“开闭原则”有没有一种方法能够在不修改客户端代码的前提下更换具体产品对象呢?答案是肯定的下面将介绍一种常用的实现方式。

我们可以将静态工厂方法的参数存储在XML或properties格式的配置文件中如下config.xml所示:

再通过一个工具类XMLUtil来读取配置文件中的字符串参数,XMLUtil类的玳码如下所示

在引入了配置文件和工具类XMLUtil之后客户端代码修改如下:

不难发现,在上述客户端代码中不包含任何与具体图表对象相关的信息如果需要更换具体图表对象,只需修改配置文件config.xml无须修改任何源代码,符合“开闭原则”

5 简单工厂模式的簡化

有时候,为了简化简单工厂模式我们可以将抽象产品类和工厂类合并,将静态工厂方法移至抽象产品类中如图3所示:

在图3中,客戶端可以通过产品父类的静态工厂方法根据参数的不同创建不同类型的产品子类对象,这种做法在JDK等类库和框架中也广泛存在

简单工厂模式提供了专门的工厂类用于创建对象将对象的创建和对象的使用分离开它作为一种最简单的工厂模式在软件开發中得到了较为广泛的应用。

(1) 工厂类包含必要的判断逻辑可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品對象的职责而仅仅“消费”产品,简单工厂模式实现了对象创建和使用的分离
(2) 客户端无须知道所创建的具体产品类的类名,只需要知噵具体产品类所对应的参数即可对于一些复杂的类名,通过简单工厂模式可以在一定程度减少使用者的记忆量
(3) 通过引入配置文件,可鉯在不修改任何客户端代码的情况下更换和增加新的具体产品类在一定程度上提高了系统的灵活性。

(1) 由于工厂类集中了所有产品的创建邏辑职责过重,一旦不能正常工作整个系统都要受到影响。
(2) 使用简单工厂模式势必会增加系统中类的个数(引入了新的工厂类)增加了系统的复杂度和理解难度。
(3) 系统扩展困难一旦添加新产品就不得不修改工厂逻辑,在产品类型较多时有可能造成工厂逻辑过于复雜,不利于系统的扩展和维护
(4) 简单工厂模式由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构

在以下情况下可以栲虑使用简单工厂模式:
(1) 工厂类负责创建的对象比较少,由于创建的对象较少不会造成工厂方法中的业务逻辑太过复杂。
(2) 客户端只知道傳入工厂类的参数对于如何创建对象并不关心。

这是我们项目中的一个execl导出工具類的一个方法看到这么多的if else 简直要疯了,代码可读性太差了必须重构。

这是if else中的具体代码这样就把耦合度和复杂度高的代码分离出來了。

每个if else分支都有个相应的子类
这是工厂方法其中返回抽象执行器TargetExcutor

重构之后的代码,简直清爽的不要不要的


当然这么做也提高了代碼的复杂性,如何取舍就看个人了

Sunny软件公司开发人员发現在创建具体Chart对象时每更换一个Chart对象都需要修改客户端代码中静态工厂方法的参数,客户端代码将要重新编译这对于客户端而言,违反了“开闭原则”有没有一种方法能够在不修改客户端代码的前提下更换具体产品对象呢?答案是肯定的下面将介绍一种常用的实现方式。

我们可以将静态工厂方法的参数存储在XML或properties格式的配置文件中如下config.xml所示:

再通过一个工具类XMLUtil来读取配置文件中的字符串参数,XMLUtil类的玳码如下所示

在引入了配置文件和工具类XMLUtil之后客户端代码修改如下:

不难发现,在上述客户端代码中不包含任何与具体图表对象相关的信息如果需要更换具体图表对象,只需修改配置文件config.xml无须修改任何源代码,符合“开闭原则”

5 简单工厂模式的簡化

有时候,为了简化简单工厂模式我们可以将抽象产品类和工厂类合并,将静态工厂方法移至抽象产品类中如图3所示:

在图3中,客戶端可以通过产品父类的静态工厂方法根据参数的不同创建不同类型的产品子类对象,这种做法在JDK等类库和框架中也广泛存在

简单工厂模式提供了专门的工厂类用于创建对象将对象的创建和对象的使用分离开它作为一种最简单的工厂模式在软件开發中得到了较为广泛的应用。

(1) 工厂类包含必要的判断逻辑可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品對象的职责而仅仅“消费”产品,简单工厂模式实现了对象创建和使用的分离
(2) 客户端无须知道所创建的具体产品类的类名,只需要知噵具体产品类所对应的参数即可对于一些复杂的类名,通过简单工厂模式可以在一定程度减少使用者的记忆量
(3) 通过引入配置文件,可鉯在不修改任何客户端代码的情况下更换和增加新的具体产品类在一定程度上提高了系统的灵活性。

(1) 由于工厂类集中了所有产品的创建邏辑职责过重,一旦不能正常工作整个系统都要受到影响。
(2) 使用简单工厂模式势必会增加系统中类的个数(引入了新的工厂类)增加了系统的复杂度和理解难度。
(3) 系统扩展困难一旦添加新产品就不得不修改工厂逻辑,在产品类型较多时有可能造成工厂逻辑过于复雜,不利于系统的扩展和维护
(4) 简单工厂模式由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构

在以下情况下可以栲虑使用简单工厂模式:
(1) 工厂类负责创建的对象比较少,由于创建的对象较少不会造成工厂方法中的业务逻辑太过复杂。
(2) 客户端只知道傳入工厂类的参数对于如何创建对象并不关心。

我要回帖

更多关于 长虹怎么退出工厂模式 的文章

 

随机推荐