工厂模式与抽象工厂模式主要解决接口选择问题。
一、工厂模式
当明确计划需要在不同条件下创建不同实例时,可以使用工厂模式。
实例:发送邮件或者短信
1、创建发送信息的接口

2、创建两个实现类(发送邮件或者发送短信)


3、创建发送消息工厂

4、测试类

5、运行结果

二、抽象工厂模式
当系统的产品有多于一个的产品族且要集成这些产品族,而系统只消费其中某一族的产品时,可以使用抽象工厂模式,它能保证客户端始终只使用同一个产品族中的对象。
1、创建发送信息的接口

2、创建两个实现类(发送邮件或者发送短信)


3、创建工厂接口

4、创建两个不同的工厂生产不同的产品


5、测试类

6、运行结果

三、对比
1、工厂模式:一个工厂类
抽象工厂模式:多个工厂类
2、抽象工厂模式好处:拓展性好,上面程序如果想增加一个功能发送qq,只需要新增一个实现类一个工厂类,无需改动现有代码。
四、对比
优点
1)优秀的扩展性。假如披萨不想吃了,想吃芝士蛋糕,只需要增加芝士蛋糕的具体工厂和具体产品类,不会影响其他产品的生产。
2)大降低代码的耦合度,客户端最终得到的是产品本身,而不需要知道和操作产品的生产过程。
缺点
1)增加新产品时,需要增加具体的工厂类和具体的产品类,当产品数量多的时候就会造成系统的复杂度增大,也增加了对系统理解的难度。
网友评论