前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >工厂模式

工厂模式

作者头像
晚上没宵夜
发布2022-05-09 21:04:25
1580
发布2022-05-09 21:04:25
举报
文章被收录于专栏:Howl同学的学习笔记

1. 工厂模式(Factory Pattern)

把创建对象的工作交由工厂来完成,我们负责向工厂拿取就行,这样就不用关注创建的逻辑,也实现了解耦。

之前用过的 DbUtils,SpringIoc都有解耦,降低代码间的依赖性

工厂模式解耦,复杂的初始化过程由工厂完成,只需在工厂修改,不用再每一次出现的位置做修改

2. 具体实现

这里分为三种:

  • 简单工厂
  • 工厂方法
  • 抽象工厂

2.1 简单工厂

在一个工厂里面可以直接生产需要的产品

1.创建实体类接口

代码语言:javascript
复制
public interface Animal {
	abstract void eat();
}

2.创建实体类,猫和狗

代码语言:javascript
复制
public class Cat implements Animal {

	public void eat() {
		System.out.println("猫吃鱼");
	}
}
代码语言:javascript
复制
public class Dog implements Animal {

	public void eat() {
		System.out.println("狗吃肉");
	}
}

3.创建工厂

代码语言:javascript
复制
public class SimpleFactory {
	
	public static Animal getAnimal(String animal){
		
		if(animal.equalsIgnoreCase("Cat")){
			return new Cat();
		}
		if(animal.equalsIgnoreCase("Dog")){
			return new Dog();
		}
		return null;
	}
}

4.调用

代码语言:javascript
复制
Animal cat = SimpleFactory.getAnimal("cat");
cat.eat();

Animal dog = SimpleFactory.getAnimal("dog");
dog.eat();

//猫吃鱼
//狗吃肉

2.2 工厂方法

与简单工厂不同的是,工厂方法每个工厂专门生产一种产品,有多少种产品就有多少种工厂

1.创建工厂接口

代码语言:javascript
复制
public interface FactoryMethod {
	abstract Animal getAnimal();
}

2.创建工厂实体

代码语言:javascript
复制
public class CatFactory implements FactoryMethod {

	public Animal getAnimal() {
		return new Cat();
	}
}
代码语言:javascript
复制
public class DogFactory implements FactoryMethod {

	public Animal getAnimal() {
		return new Dog();
	}
}

3.调用

代码语言:javascript
复制
CatFactory cf = new CatFactory();
// 从猫工厂拿到一只猫
Animal cat = cf.getAnimal();
cat.eat();
代码语言:javascript
复制
DogFactory df = new DogFactory();
// 从狗工厂拿到一条狗
Animal dog = df.getAnimal();
dog.eat();

2.3 抽象工厂

过于累赘,就是往工厂再套上一层工厂,一个顶级工厂生产下级工厂,这些不同的下级工厂生产不同的产品,方法与上面类似

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-12-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 工厂模式(Factory Pattern)
  • 2. 具体实现
    • 2.1 简单工厂
      • 2.2 工厂方法
        • 2.3 抽象工厂
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档