1.工厂方法模式概念
当创建对象时,我们不会对构造类的对象进行实例化。这是通过为不同类型的对象调用一个公共的接口来完成的。
2.工厂方法组成部分
1)抽象工厂(Creator)
声明一个用于创建产品的工厂方法。
2)具体工厂(Concrete Creator)
实现抽象工厂中的工厂方法,用于创建一个具体产品对象。
3)抽象产品(Product)
定义了产品的规范,即所有产品共有的公共接口。
4)具体产品(Concrete Product)
由具体工厂创建,实现抽象产品接口。
3.举个栗子:
如下图:
注:对象的创建过程交给工厂了,我们负责使用,不直接和对象类打交道,而是和工厂打交道.
4.代码实现
1)抽象产品
Animal
package org.xiji.fucFactory;/*** 动物抽象接口*/
public interface Animal {/*** 动物叫声*/void shout();
}
2)具体产品
Cat
package org.xiji.fucFactory;public class Cat implements Animal{@Overridepublic void shout() {System.out.println("猫:喵喵喵");}
}
Fish
package org.xiji.fucFactory;/*** 鱼*/
public class Fish implements Animal{@Overridepublic void shout() {System.out.println("鱼:········");}
}
3)抽象工厂
AnimalFactory
package org.xiji.fucFactory;/*** 定义动物工厂接口*/
public abstract class AnimalFactory {/**** 创建动物*/public abstract Animal createAnimal();
}
4)具体工厂
CatAnimalFactory
package org.xiji.fucFactory;public class CatAnimalFactory extends AnimalFactory{@Overridepublic Animal createAnimal() {return new Cat();}
}
FishAnimalFactory
package org.xiji.fucFactory;public class FishAnimalFactory extends AnimalFactory{@Overridepublic Animal createAnimal() {return new Fish();}
}
4.测试代码:
FucFactoryMain
package org.xiji.fucFactory;/*** 方法工厂模式测试类*/
public class FucFactoryMain {public static void main(String[] args) {/*** 想要一直猫** 猫工厂=====>猫===》叫*/AnimalFactory animalFactory = new CatAnimalFactory();Animal cat = animalFactory.createAnimal();cat.shout();/*** 想要一只鱼*/AnimalFactory animalFactory1 = new FishAnimalFactory();Animal fish = animalFactory1.createAnimal();fish.shout();}
}