简单工厂的设计模式

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

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调用动物类;
而通过多态多态的特性,可以返回该父类或者其子类,作为返回类型;
我们仅需要输入字符串参数,工厂类则会自动将创建出对应的子类产品~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值