【第二天】设计模式-简单工厂模式

前言

简单工厂模式是工厂设计模式的一种简单实现,通过一个工厂对象传入不同的参数构造出不同的对象。

一、简单工程模式UML图

在这里插入图片描述

简单工厂模式构成角色如下表所示。

对象 角色
SimpleFactory 简单工厂,根据传入的参数生成Product对象,依赖Product对象
Product 产品抽象对象
ContentProduct 具体的产品,继承Product,ContentProduct是多个不同的Product对象,在UML图中统一用ContentProduct来表示。

二、代码案例

我们来创建一个简单动物工厂类SimpleFactory,用于创建各种动物,各种动物对象就相当于Porduct角色。简单工厂模式又叫做静态工厂方法,一般用于创建对象的方法都是静态的,该方法根据预设传入的参数创建不同对象,并将该对象返回。

public class AnimalSimpleFactory {
    
    
	public static Animal animal;//动物抽象对象

	public static Animal  createAnimal(String animalName) {
    
    
		switch(animalName) {
    
    
		case "dog":
			animal = new Dog();
			break;
		case "cat":
			animal = new Cat();
			break;
		default:
			animal = null;
			System.out.println("该动物没有实现");
		}
		return animal;
	}
}

接下来我们创建一个动物类,担任Product(产品)角色。动物类是一个抽象类,有可定义共同的行为,其他差异行为可由子类具体实现。

public abstract class Animal {
    
    	
	public abstract void eat();
	
	public void metabolism() {
    
    
		System.out.print("新陈代谢");
	}

}

创建一个Cat(猫)类,担任ContectProduct(具体产品)角色,继承Animal类。

public class Cat extends Animal{
    
    
	@Override
	public void eat() {
    
    
		System.out.println("猫吃老鼠");
	}
}
public class Dog extends Animal{
    
    
	@Override
	public void eat() {
    
    
		System.out.println("狗啃骨头");
	}
}

建立一个测试类,调用和=AnimalSimpleFactory(简单动物工程)对象创建动物的方法,并传入预设的参数,工厂返回我们想要的对象。

public class test {
    
    
	public static void main(String[] args) {
    
    
		Animal animal = AnimalSimpleFactory.createAnimal("dog");
		animal.eat();
		
		animal = AnimalSimpleFactory.createAnimal("cat");
		animal.eat();
	}
}

总结

优点

1、工厂类含有创建产品的逻辑,可以在不同的时刻通过参数决定工厂生产什么产品,也可以通过配置文件决定。
2、客户端不在范负责产品的产生,只需要与工厂类和抽象产品对象即可,降低了代码的耦合性。

缺点

1、违背了开闭原则,每次要添加一个产品都要修改工程类
2、如果产品无限增加,带来了复杂的业务逻辑,不利于维护
3、使用了静态方法,破坏了继承

使用场景分析

简单工厂模式封装了对象的创建,客户端可以不用关心对象创建逻辑,只需要知道创建参数即可。在创建代码逻辑足够简单,我们可以把产品对象的创建逻辑封装到简单工厂中,在此条件下稍微违背开闭原则也是允许的。

猜你喜欢

转载自blog.csdn.net/yuwusheng18/article/details/111557243