23种设计模式(Factory模式)

来源:互联网 发布:软件中属于系统软件 编辑:程序博客网 时间:2024/05/17 09:30

1、问题场景

场景:为了高内聚、低耦合,我们经常抽象一些公共的接口形成基类或者接口。这样我们可以通过基类指针指向实现了virtual方法的子类,实现动态绑定。
问题:   (1)、复杂的系统中,子类命名会成为一个头疼的问题,因为当父类指向子类的时候需要确切的知道子类的实例对象;程序的扩展性会变差,维护也变得困难。
  (2)、父类有时候并不知道具体要实例的哪一个具体的子类。

2、解决办法

工厂模式:定义创建对象的接口,封装了对实例的创建;同时具体类的实例工作延迟到子类中完成。其中工厂模式有三种模型组成:简单工厂(Simple Factory)、工厂方法(Factory Method)以及抽象工厂(Abstract Factory)。

2.1、简单工厂(Simple Factory)

简   述:简单工厂又名静态工厂方法,它的表现形式:定义一个能够创建对象指定具体实例的接口(static 方法)。
UML图:
优缺点:开闭原则(对扩展开发、对修改封闭);当有新产品加入时,简单工厂很被动(直观地说就是要在原来的方法中新增更多的业务逻辑判断)。

2.2、工厂方法(Factory Method)

简    述:工厂方法去掉了简单工厂的静态方法,它的表现形式:抽象创建实例方法(virtual 方法)。
UML图:
 
优缺点当产品类型单一,但是呈树形增长时,工厂方法可以很好的解决工厂对应的产品的关系;当产品数量的增长伴随着产品的分类,虽然不用像简单工厂那样更改原有代码,但是增加了工厂类的维护难度。

2.3、抽象工厂(Abstract Factory)

简   述:抽象工厂与工厂方法相比,复杂程度上呈几何增长,但是它能很好的解决多产品的树形增长,它的常表现形式与工厂方法类似,但又有区别。要想使用抽象工厂必须满足的条件:
1、系统中有多个产品系列,而且客户一次消费一个系类的产品;
2、同属于同一系列的产品供其使用。
UML图:
 
优缺点很好地解决了多系列产品的实例创建;由于抽象工厂使用的继承与多态,会增加后期对工厂类的维护成本。

---------------------------------------------------------------------------

Name:一个奔跑中的loser

E-mailchenfeiyoucan@163.com

_________________________________________


0 0
原创粉丝点击