欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

简单工厂

程序员文章站 2022-05-23 19:41:00
...

抽象动物类,包含了动物相同特性的功能:

public abstract class Animal {
    public abstract void eat();
}

动物工厂:

public class AnimalFactory {
//私有构造
    private AnimalFactory(){}

//第一种方法:
//外界想要狗直接类名.方法就可以
    /*public static Dog createDog(){
        return new Dog();
    }
//外界想要猫直接类名.方法就可以
    public  static  Cat creareCat(){
        return new Cat();
    }*/

//第二种方法:
//外界想要什么就从参数传进来,然后判断要狗还是猫,如果没有就返回null
    public static Animal createAnimal(String type){
        if("dog".equals(type)){
            return new Dog();
        }else if("cat".equals(type)){
            return new Cat();
        }
        return null;
    }

}

猫类继承着动物:

public class Cat extends Animal {
    @Override
    public void eat() {
        System.out.println("狗吃鱼");
    }
}

狗类继承着动物:

public class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println("狗吃肉");
    }
}

测试类:


public class AnimalDemo {
    public static void main(String[] args) {
        Dog d = new Dog();
        d.eat();
        Cat c = new Cat();
        c.eat();
        System.out.println("--------------");

        /*//工厂返回了一个Cat对象,然后用Animal接收
        Animal a1=AnimalFactory.creareCat();
        //这里访问的就是Cat里面的eat()方法
        a1.eat();

        //工厂返回了一个Dog对象,然后用Animal接收
        a1=AnimalFactory.createDog();
        //这里访问的就是Dog里面的eat()方法
        a1.eat();
*/
		//想要狗,传个dog
        Animal a=AnimalFactory.createAnimal("dog");
        //用的时候判断一下是否为空
        if(a!=null){
            a.eat();
        }else{
            System.out.println("暂时不提拱");
        }

        a=AnimalFactory.createAnimal("123");
        if(a!=null){
            a.eat();
        }else{
            System.out.println("暂时不提拱");
        }
    }
}

相关标签: 工厂