工厂模式相关

来源:互联网 发布:更改信息sql语句 编辑:程序博客网 时间:2024/05/25 01:36

场景:针对设置字体大小,字体颜色,背景,字体等属性。

简单工厂(静态方法):工厂提供setStyle()方法可以设置字体大小为20sp,字体颜色红色,背景为111.jpg。这种方式简单直接,只需要一个接口,3个产品类,一个简单工厂类即可实现。
现在有一个问题:此时如果需要设置字体为黑体,简单工厂的setStyle()方法是没有设置字体功能的。这时就需要修改简单工厂的类,没有可扩展性。

此时用工厂方法模式可实现可扩展性。
工厂方法类抽象出setStyle方法,由具体的工厂来实现。
此时需要一个接口,3个产品类,3个对应的工厂类,一个抽象工厂类实现。即增加1个对应的产品类和工厂类。
这种方式的好处是可以随时扩展出一个属性来而不需要修改其他类的代码,只需要增加一个产品类和一个对应的工厂类。可以为每种属性设置一个值。

现在问题又来了:如果需要为每种属性设置多个值,如冷色调和暖色调,以及其他值(UI界面换皮肤等),工厂方法就不够用了。此时需要使用抽象工厂方法,即在工厂方法的基础上实现多个接口。
实现m个属性,需要用到:
n个接口,n*m个产品方法,m个工厂类,一个抽象工厂类。
感觉工厂方法是抽象工厂方法只实现一个接口的情况,有木有?

各自的优点:
1.简单工厂,简单粗暴。
2.工厂方法,容易增加产品,即场景中容易增加属性,添加font属性只需要添加一个产品类实现接口,一个对应的工厂类即可。
3.抽象工厂方法,容易增加工厂,但是不容易增加接口,即场景中容易增加n个产品类和一个实现抽象工厂类的工厂类。

https://github.com/wang232024/designpattern.git

原创粉丝点击