背景
Java二十三种设计模式的简单介绍,目的是能看懂别人写的设计模式代码,且能应用常用的设计模式。
设计模式分类
创建型模式
工厂方法(Factory)
工厂模式分为三种:简单工厂(不属于23种 设计模式,是工厂方法的特例),工厂方法,抽象工厂。
工厂模式的相关概念:
- 产品:类的实例
- 抽象产品:抽象类或接口
- 产品簇:多个有内在联系或者有逻辑关系的产品。比如肯德基套餐:薯条+汉堡+可乐
- 产品等级:相当于产品类型
工厂模式的思想是面向接口编程。
简单工厂是工厂方法的一个特例,先来看看简单工厂。
工厂是一个类,工厂生产产品。
每 new 一个对象,相当于调用者多知道了一个类,增加了类与类之间的联系,不利于程序的松耦合。其实构建过程可以被封装起来,工厂模式便是用于封装对象的设计模式。
水果工厂:
public class FruitFactory {
public Fruit create(String type) {
switch (type){
case "Apple": return new Apple();
case "Pear": return new Pear();
default: throw new IllegalArgumentException("invalid fruit type");
}
}
事实上,将构建过程封装的好处不仅可以降低耦合,如果某个产品构造方法相当复杂,使用工厂模式可以大大减少代码重复,这对调用者是很方便的,因为它不用关心复杂的对象构建过程。
优点:封装了对象构建过程,让客户端调用变得方便,让程序解耦。
缺点:
- 客户端需要记住产品的映射关系
- 如果具体产品多,则简单工厂变得十分臃肿
- 客户端需要扩展具体产品的时候,势必要修改简单工厂中的代码,这样违反了开闭原则
工厂方法模式来解决简单工单的弊端,它规定每个产品都有一个专属工厂。
工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
工厂方法模式(Factory Method pattern)是最典型的模板方法模式(Template Method pattern)应用
工厂方法有四个角色:抽象工厂,具体工厂;抽象产品,具体产品
// 工厂接口
public interface IFruitFactory {
Fruit create();
}
// 苹果工厂
public class AppleFactory implements IFruitFactory {
public Fruit create() {
return new Apple();
}
}
// 梨子工厂
public class PearFactory implements IFruitFactory {
public Fruit create() {
return new Pear();
}
}
工厂将构建过程封装起来,调用者可以很方便的直接使用,同时他解决了简单工厂的两个弊端:
- 产品种类多时,工厂类不会臃肿。工厂方法符合单一职责原则。
- 需要新的产品时,不用改原来的工厂类,只需要添加新的工厂类。符合开闭原则。
与此同时,还是那个的缺点:产品等级增多时,工厂类的数量就会增多。
标签:Java,方法,工厂,产品,new,设计模式,快速,public From: https://www.cnblogs.com/cloudrich/p/16849533.html