简单工厂
程序员文章站
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("暂时不提拱");
}
}
}