设计模式基础(二)

2019-03-12  本文已影响0人  Maxinxx

简单工厂模式

思想:通过创建一个工厂类,专门创造对象,不需要在main函数里,自己创造对象了。

public abstract class Animal {
    public abstract void eat();
}
public class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println("狗吃肉");
    }
}
public class Cat extends Animal {
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }
}
public class AnimalFactory {
    //把构造私有,把成员方法变成静态,就可以通过类名直接调用,
    //不需要创造对象了
    private AnimalFactory() {}
    
    public static Dog createDog() {
        return new Dog();
    }
    
    public static Cat createCat() {
        return new Cat();
    }
    
}
public class AnimalDemo {
    public static void main(String[] args) {
        //具体类调用
        Dog d = new Dog();
        Cat c = new Cat();  
        d.eat();
        c.eat();
        System.out.println("-----------------------");
        
        //工厂有了后,通过工厂给造对象
        Dog dd = AnimalFactory.createDog();
        Cat cc = AnimalFactory.createCat();
        dd.eat();
        cc.eat();
        System.out.println("-----------------------");
    }
}

工厂改进后

public class AnimalFactory {
    //把构造私有,把成员方法变成静态,就可以通过类名直接调用,
    //不需要创造对象了
    private AnimalFactory() {}

    public static Animal creatAnimal(String type) {
        if("dog".equals(type)) {
            return new Dog();
        }else if("cat".equals(type)){
            return new Cat();
        }else {
            return null;
        }
    }
    
}
public class AnimalDemo {
    public static void main(String[] args) {
        //具体类调用
        Dog d = new Dog();
        Cat c = new Cat();  
        d.eat();
        c.eat();
        System.out.println("-----------------------");
        
        //工厂改进后
        Animal ddd = AnimalFactory.creatAnimal("dog");
        Cat ccc = (Cat) AnimalFactory.creatAnimal("cat");
        ddd.eat();
        ccc.eat();

        Animal a = AnimalFactory.creatAnimal("pig");
        if(a != null) {
            a.eat();
        }else {
            System.out.println("对不起,不提供这种动物");
        }
    }
}
上一篇 下一篇

猜你喜欢

热点阅读