工厂模式

一.定义:将对象的创建和使用解耦,使用单独工厂类来创建对象;

二.工厂模式的几种实现

本文提到的四种工厂模式是不断优化改进的结果

1.简单工厂模式

interface Animal{
	void eat();
}

class Dog implements Animal{
	@Override
	public void eat(){
		System.out.println("Dog eat bone!");
	}
}
class Cat implements Animal{
	@Override
	public void eat(){
		System.out.println("Cat eat fish!");
	}
}
class Factory{
	public Animal getAnimal(String s){
		if(s=="Dog"){
			return new Dog();
		}
		else if(s=="Cat"){
			return new Cat();
		}
		else{
			System.out.println("Please input correct animal name!");
			return null;
		}
	}
}
public class FactoryPattern {
	public static void main(String[] args){
		Factory factory=new Factory();
		Animal dog=factory.getAnimal("Dog");
		dog.eat();
	}
}

问题:简单工厂模式在创建对象时需要输入对象的名字,如果错误则无法创建对象,需要改进;

2. 工厂方法模式

interface Animal{
	void eat();
}

class Dog implements Animal{
	@Override
	public void eat(){
		System.out.println("Dog eat bone!");
	}
}
class Cat implements Animal{
	@Override
	public void eat(){
		System.out.println("Cat eat fish!");
	}
}
class Factory{
	public Animal getDog(){
		return new Dog();
	}
	public Animal getCat(){
		return new Cat();
	}
}

public class FactoryMethod {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Factory factory=new Factory();
		Animal dog=factory.getDog();
		dog.eat();
	}
}

工厂方法模式在工厂类中增加了不同方法来创建相应的对象.

3. 静态工厂模式:将工厂方法模式中的方法改为静态方法即可.实际常使用静态工厂模式.

工厂方法模式和静态工厂模式都存在一个问题,即每次扩展时,均需要修改工厂类,增加方法来创建相应的对象,违反了开闭原则

4. 抽象工厂模式:

抽象工厂模式是增加一个工厂类的接口AnimalFactory,该接口存在一个方法来产生Animal对象;当程序扩展需要增加一个实现了Animal接口的类时(如Cow),同时需要增加一个实现AnimalFactory接口的工厂类,来产生相应的对象,符合”开闭原则”的要求.

 

interface Animal{
	void eat();
}
class Dog implements Animal{
	@Override
	public void eat(){
		System.out.println("Dog eat bone!");
	}
}
class Cat implements Animal{
	@Override
	public void eat(){
		System.out.println("Cat eat fish!");
	}
}
interface AnimalFactory{
	Animal getAnimal();
}
class DogFactory implements AnimalFactory{
	public Animal getAnimal(){
		return new Dog();
	}
}
class CatFactory implements AnimalFactory{
	public Animal getAnimal(){
		return new Cat();
	}
}

public class AbstractFactoryPattern {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		DogFactory df=new DogFactory();
		Animal dog=df.getAnimal();
		dog.eat();
	}
}

三.工厂模式的优点

1.代码解耦  将对象的创建和使用解耦,

2.降低代码重复  如果对象创建非常复杂,且需要多次创建,将创建方法放入工厂中,降低代码重复,同时便于管理

四.使用场景

1.对象创建过程非常复杂,初始化内容较多;

2.对象使用频繁,且创建过程需要多次修改;

工厂模式的作用,这篇文章讲解的不错

https://blog.youkuaiyun.com/q89757316/article/details/80233864

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值