1.简介:工厂模式属于创建型模式,主要用于对象的创建。工厂模式不会对客户暴露创建逻辑,并且是通过一个共同的接口来指向新创建的对象
2.分类:
- 简单工厂模式
- 工厂方法模式
- 抽象工厂模式
3.优点:
- 解耦:对象的创建和使用分离
- 复用性高:对于创建对象复杂,使用频率较高的对象,通过工厂模式,提高代码复用性
4.简单工厂模式:简单工厂模式违背了开闭原则
4.1 使用场景:创建对象较少,客户无需注重对象创建过程
4.2 优点:用户获取对象简单
4.3 缺点:违背开闭原则,每增加一个类都需要修改工厂类
public interface Animal{
}
public class Dog implements Animal{
public Dog(){
System.out.print("dog create!");
}
}
public class Cat implements Animal{
public Dog(){
System.out.print("cat create!");
}
}
public class AnimalFactory{
public Animal getAnimal(String animalType){
if(animalType.equalsIgnoreCase("DOG")){
return new Dog();
}
if(animalType.equalsIgnoreCase("CAT")){
return new Cat();
}
}
return null;
}
5.工厂方法模式
5.1 使用场景:
- 无需知道类,只需要知道具体类的工厂类
- 将对象创建委托给具体工厂,也可以动态指定工厂
5.2 工厂方法模式与普通工厂模式对比
1.当需要组合其他类对象作为初始操作时,使用工厂方法模式。
2.简单工厂模式会将所有类的创建集中在一个工厂类中,从而使工厂类较为复杂
5.3 优点
1.拓展性高。
2.对调用者屏蔽。
5.4 缺点
1.增加具体类时,需要增加工厂类,增加了系统复杂度
public interface Animal{
}
public class Dog implements Animal{
public Dog(){
System.out.print("dog create!");
}
}
public class Cat implements Animal{
public Dog(){
System.out.print("cat create!");
}
}
public interface AnimalFactory{
public Animal getAnimal();
}
public class DogFactory implements AnimalFactory{
public Animal getAnimal(){
return new Dog();
}
}
public class CatFactory implements AnimalFactory{
public Animal getAnimal(){
return new Cat();
}
}
public static void main(String[] args){
AnimalFactory dog = new DogFactory();
AnimalFactory cat = new CatFactory();
dog.getAnimal();//create Dog
cat.getAnimal();//create Cat
}
6.抽象工厂模式
6.1 抽象工厂模式是对工厂模式的进一步深化。
6.2 优点:扩展性高,可通过一组对象实现某个功能
6.3 缺点:一旦新增类就需要修改原有代码,不符合开闭原则