Android 设计模式之工厂方法模式

前言,相关联博客如下:

Android 设计模式之简单工厂模式

Android 设计模式之工厂方法模式

Android 设计模式之抽象工厂模式


目录

1. 定义

1.1 什么是工厂方法模式?

1.2 与简单工厂模式有什么不同?

1.3 什么时候用工厂方法模式

2. 工厂方法模式实践案例Demo

3. 工厂方法模式的优缺点


1. 定义

1.1 什么是工厂方法模式?

定义一个创建产品对象工厂抽象工厂接口,将创建具体产品对象(即实例化对象)工作放到子类中进行

由四大模块组成,如下图(图片来自Android源码设计模式解析与实战)

  1. 抽象工厂:是工厂方法模式的核心。
  2. 具体工厂:实现了具体的业务逻辑。
  3. 抽象产品:是工厂方法模式所创建的产品的父类
  4. 具体产品:实现抽象产品的某个具体产品的兑现。

1.2 与简单工厂模式有什么不同?

相对比 简单工厂模式,工厂方法模式增加一个抽象的工厂接口,不需要具体产品的创建工作,而且具体产品对象工厂必须实现这个接口,让系统结构进一步抽象化。所以,其实本质上简单工厂模式只是工厂方法模式的一个弱化版本。

1.3 什么时候用工厂方法模式

当你需要创建一个复杂对象,并且在执行期间不知道需要什么确切的子类,需动态决定需要的子类时,就可以使用工厂方法模式。

2. 工厂方法模式实践案例Demo

故事前提条件参考上篇博客Android 设计模式之简单工厂模式

老板带着小明和老王来到饭店,开始定菜。点了红烧肉和酸菜鱼。

效果见:

代码实现:

可以分为两大步骤:

一. 创建食物对象接口和具体食物对象类(跟简单工厂模式一样)。

二. 创建食物对象工厂接口和具体食物对象工厂类。

1. 创建食品对象接口

public interface Food {
    String get();
}

2. 创建具体食物对象类,实现食物对象接口

public class Pork implements Food {
    @Override
    public String get() {
        return "红烧肉";
    }
}
public class Fish implements Food {
    @Override
    public String get() {
        return "酸菜鱼";
    }
}

3. 创建食物对象工厂接口

public interface FoodFactory {
    Food getFood();
}

4. 创建具体食物对象工厂,实现对象工厂接口

public class PorkFactory implements FoodFactory {
    @Override
    public Food getFood() {
        return new Pork();
    }
}
public class FishFactory implements FoodFactory {
    @Override
    public Food getFood() {
        return new Fish();
    }
}

5. 测试(测试效果见上图)

public class FactoryMethodTestActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_factory_method_test);

        TextView firstMenuTv = findViewById(R.id.first_menu_tv);
        TextView secondMenuTv = findViewById(R.id.second_menu_tv);

        //通过porkFoodFactory来实例化pork对象,拿到"红烧肉"
        FoodFactory porkFoodFactory = new PorkFactory();
        Food pork = porkFoodFactory.getFood();
        firstMenuTv.setText(pork.get());

        //痛殴fishFoodFactory来实例化fish对象,拿到"酸菜鱼"
        FoodFactory fishFoodFactory = new FishFactory();
        Food fish = fishFoodFactory.getFood();
        secondMenuTv.setText(fish.get());
    }
}

3. 工厂方法模式的优缺点

优点:

1. 主要是解决了简单工厂模式的不足,当需要增加一个产品时,只要添加一个具体产品对象和具体对象工厂,符合“开放封闭原则”。

缺点:

1. 将实例化对象转移到子类中,将简单工厂模式中判断逻辑转移到子类中,增加代码量以及工作量。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值