Java中设计模式之简单工厂模式

时间:2022-03-05 23:47:25
简单工厂模式--->静态工厂方法模式
 
设计一个工厂类:
     工厂类提供一些静态方法,间接的去创建具体的对象
 
优点:
不需要在创建具体类的对象,而是把创建的工作交给了工厂类来创建!
弊端:
如果有新的对象增加,或者某些对象的创建方式不同,就需要不断的修改工厂类,不利于后期的维护(违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中)


步骤:


1)新建一个接口,写出要实现的方法。

动物吃的功能
public abstract  class Animal {    
    //抽象功能
    public abstract void eat() ;
}

2)新建一个实现类来实现上面的接口,实现接口里面的方法。

创造一只猫
public class Cat extends Animal {

    @Override
    public void eat() {
        System.out.println("猫吃鱼...");
    }

}
创造一只狗
public class Dog extends Animal{

    @Override
    public void eat() {
        System.out.println("狗吃骨头...");
    }
    
}

3)新建一个工厂类,私有无参构造方法(不让外界创建该类对象),所以这个类里面的方法需要是静态的。在这个类里面来新建对象。

public class AnimalFactory {

    //无参构造私有:外界不能创建该类对象
    private AnimalFactory() {
        
    }
    
    //想办法用多态的形式解决:代码扩展性
    public static Animal createAnimal(String type) {
        if("cat".equals(type)) {     //将传入的参数进行对比
            return new Cat() ;
        }else if("dog".equals(type)) {
            return new Dog() ;
        }
        return null;
    }
    
}

4)新建一个演示类,使用工厂类来创建对象(使用多态,提高代码的扩展性),然后调用实现类的方法。

public static void main(String[] args) {                    
    //改进:使用抽象类多态的形式改进工厂类
    Animal a = AnimalFactory.createAnimal("cat") ;
    a.eat();
    a = AnimalFactory.createAnimal("dog") ;   //提高了扩展性
    a.eat();      
    a = AnimalFactory.createAnimal("pig") ;
    //对象进行非空判断
    if(a!=null) {// 如果输入的在工程类中没有定义则会报错java.lang.NullPointerException,所以需要进行非空判断。
        a.eat();
    }else {
        System.out.println("抱歉,当前工厂类不提供该动物类的创建");
    }
    
        
}