工厂模式
1、概念
·工厂模式是我们最常用的实例化对象模式,是用工厂方法代替vnew操作的一种模式。
2、好处
·使用工厂模式的好处是,如果你想要更改所实例化的类名等,则只需更改该工厂方法内容
即可,不需逐一寻找代码中具体实例化的地方(new处)修改了。为系统结构提供灵活的动态扩展机制,减少了耦合。
3、分类
·简单工厂模式
·工厂方法模式
·抽象工厂模式
简单工厂模式
·简单工厂模式实现了产品类的代码跟客尸端代码分离,但会有一个回题,优秀的代码是符合“开闭原则”
如果你要加一个C类产品,你就要修改工厂类里面的代码,也就是说要增加条件语句如: switch---case。
对于这个问题,接下来的工厂方法模式可以解决这个问题。
工厂方法模式
工厂方法就是为配一个产品提供一个独立的工厂类,通过不同的工厂实例来创建不同的产品实例。
优点:
1.拥有良好的封装性,代码结构清晰。对于每一个对象的创建都是有条件约束的。
如:调用一个具体的产品对象,只需要知道这个产品的类名和约束参数就可以了,不用知道创建对象自身的复杂过程。降低模块之间的耦合度。
2.拥有良好的扩展性,新增一个产品类,只需要适当的增加工厂类或者扩展一个工厂类,如下面的例子中,当需要增加一个数据库Oracle的操作,
则只需要增加一个Oracle类,厂类不用修改任务就可完成系统扩展。
3.屏蔽产品类。这一特点非常重要,产品类的实现如何变化,调用者都不需要关心,它只需要关心产品的接口,只要接口保持不变,系统中的上层模块就不要发生变化。
使用场景:
·1.支付宝、微信、银联的连接方式(cornectMode),支付方式(payMode)。使用工厂模式,
“客户"就不需要要知道具体的连接方式和支付方式了,只需要调用connectMode和payMode即可。
2. MySQL、SQL Server、Oracle等数据库的连接方式(connectMode)、查询方式(selectMode)等操作可以使用工厂模式进行封装。
抽象工厂模式
1、抽象工厂模式的组成
·1.抽象工厂(AbstvactFactovy):确定工厂的业务范围。
·2.具体工厂(ConcreteFactovy) :每个具体工厂对应-一个产品族。具体工厂决定生产哪个具体产品对象。
·3.抽象产品(AbstractProduct):同--产品等级结构的抽象类。
·4.具体产品(ConcreteProduct):可供生产的具体产品。
2、工厂方法模式的组成
·一个抽象产品类,可以派生出多个具体产品类。
·一个抽象工厂类,可以派生出多个具体工厂类。·每个具体工厂类只能创建一个具体产品类的实例。
3、简单工厂模式的组成
·多个抽象产品类,每个抽象产品类可以派生出多个具体产品类一个抽象工厂类,可以派生出多个具体工厂类。
·每个具体工厂类可以创建多个具体产品类的实例。
4、三种工厂模式的比较
·简单工厂:用来生产同一等级结构中的任意产品。(对于增加新的产品,无能为力)
·工厂方法:用来生产同一等级结构中的固定产品。(支持增加任意产品)
·抽象工厂:用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)