简单工厂的设计模式

工厂设计模式,不仅可以使用父类做方法的形参,还可以使用父类做方法的返回值类型,真实返回的对象可以是该类的任意一个子类对象。
简单工厂模式的实现,它是解决大量对象创建问题的一个解决方案。将创建和使用分开,工厂负责创建,使用者直接调用即可。简单工厂模式的基本要求是

1.定义一个static方法,通过类名直接调用

2.返回值类型是父类类型,返回的可以是其任意子类类型

3.传入一个字符串类型的参数,工厂根据参数创建对应的子类产品
public class Animal {
    
    //父类:动物:
    public void shout(){
    
    
        System.out.println("我是小动物,我可以叫。。。");
    }
}
public class Cat extends Animal{
    
    
    //喊叫方法:
    public void shout(){
    
    
        System.out.println("我是小猫,可以喵喵叫");
    }
    public void scratch(){
    
    
        System.out.println("我是小猫,我可以挠人");
    }
}
public class Dog extends Animal{
    
    
    //喊叫:
    public void shout(){
    
    
        System.out.println("我是小狗,我可以汪汪叫");
    }
    public void guard(){
    
    
        System.out.println("我是小狗,我可以看家护院,保护我的小主人。。。");
    }
}
public class Pig extends Animal{
    
    
    public void shout(){
    
    
        System.out.println("我是小猪,我嗯嗯嗯的叫");
    }
    public void eat(){
    
    
        System.out.println("我是小猪,我爱吃东西。。");
    }
}
public class Girl {
    
    
    //跟猫玩耍:
    /*public void play(Cat cat){
        cat.shout();
    }*/
    //跟狗玩耍:
    /*public void play(Dog dog){
        dog.shout();
    }*/
    //跟小动物玩耍:
    public void play(Animal an){
    
    
        an.shout();
    }
}

如果对多态还没有清楚的认识,可以看一下这篇文章
链接: 速通面向对象三大特性.

建立工厂类

public class PetStore {
    
    //宠物店---》工厂类
    //方法: 提供动物
    public static Animal getAnimal(String petName){
    
    //多态的应用场合
        Animal an = null;

        if("猫".equals(petName)){
    
    //使用petName.equals("猫") == 》容易出现空指针异常
            an = new Cat();
        }else if("狗".equals(petName)){
    
    
            an = new Dog();
        }else if("猪".equals(petName)){
    
    
            an = new Pig();
        }
        return an;
    }
}

测试类

public class Demo {
    
    
    public static void main(String[] args) {
    
    
        Girl g = new Girl();
        //Cat c = new Cat();
        //Dog d = new Dog();
        //Pig p = new Pig();
        Animal an = PetStore.getAnimal("狗");
        g.play(an);
    }
}
结果: 我是小狗,我可以汪汪叫

可以从上面直观的感受到多态应用到工厂类的效果:
一个工厂类可以直接使用static调用动物类;
而通过多态多态的特性,可以返回该父类或者其子类,作为返回类型;
我们仅需要输入字符串参数,工厂类则会自动将创建出对应的子类产品~

猜你喜欢

转载自blog.csdn.net/chwensrong/article/details/119489922