工厂方法模式

  工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法是一个类的实例化延迟到其子类。


  工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行。你想要加功能,本来是改工厂类的,而现在是修改客户端!


  工厂方法克服了简单工厂违背开-闭原则的缺点,有保持了封装对象创建过程的优点。但缺点是由于每加一个产品,就需要加一个产品工厂的类,增加了额外的开发量。 

 

工厂方法模式-》为每种类型的对象的创建都交给该类型对应的工厂,也就是说一种类型对应一个该类型具体的工厂,例如:要创建Dog,就使用Dog的工厂来创建Dog;要创建Cat,就使用Cat的工厂来创建。

  用于创建的对象种类比较多的情况下,扩展性相对于简单工厂模式要好,扩展的时候不需要改动原先的代码,想要扩展一种动物,只需要扩展对应的工厂类。

 

1 public abstract class Animal {
2     public abstract void sayHello();
3 }
1 public class Cat extends Animal{
2     @Override
3     public void sayHello() {
4         System.out.println("hello,我是猫");
5     }
6 }
1 public class Dog extends Animal{
2     @Override
3     public void sayHello() {
4         System.out.println("hello,我是哈士奇");
5     }
6 
7 }

 

1 //工厂
2 public interface Factory {
3     public abstract Animal createAnimal();
4 }

 

1 public class DogFactory implements Factory{
2     @Override
3     public Animal createAnimal() {
4         return new Dog();
5     }
6 
7 }

 

1 public class CatFactory implements Factory {
2     @Override
3     public Animal createAnimal() {
4         
5         return new Cat();
6     }
7     
8 }

测试类:

1 public class AnimalTest {
2     public static void main(String[] args) {
3         // 需求:找只猫
4         Factory f = new CatFactory();
5         // 上溯造型
6         Animal animal = f.createAnimal();
7         animal.sayHello();
8     }
9 }

 

UML图:

 

posted @ 2018-08-07 21:48  以前、以后  阅读(105)  评论(0编辑  收藏  举报