我的第一篇博客,关于java简单工厂模式

(如有错漏之处,敬请指正)

简单工厂模式的理解

简单工厂模式就类似与现实中的工厂,能加工一类产品,例如冰淇淋工厂,传入巧克力配料,生成的就是巧克力冰淇淋,传入香草配料,生成的就是香草冰淇淋。所以在Java中,通过传入不同的参数,来获取到不同的实例就称为简单工厂模式。
j简单工厂的uml图

首先创建一个接口

定义了动物共有的抽象信息
public interface Animal {
    void eat();
    
    void paly();

    void run();
    
}

创建具体实现类

小猫的类实现动物的接口

public class Cat implements Animal {
    private String name;

    public Cat(String name) {
        this.name = name;
    }

    @Override
    public void eat() {
        System.out.println(name+"正在吃饭");


    }

    @Override
    public void paly() {
        System.out.println(name+"正在玩耍");


    }

    @Override
    public void run() {
        System.out.println(name+"跑步");

    }
}

小狗的类实现动物的接口


public class Dog implements Animal {
    private String name;

    public Dog(String name) {
        this.name = name;
    }

    @Override
    public void eat() {
        System.out.println(name+"正在吃饭");


    }

    @Override
    public void paly() {
        System.out.println(name+"正在玩耍");


    }

    @Override
    public void run() {
        System.out.println(name+"跑步");

    }
}

使用一般方法实现

通过直接实例化调用

public class Zoo {

    public static void main(String[] args) {
        Dog dog = new Dog("小狗");
        Cat cat = new Cat("小猫");
        dog.eat();
        dog.paly();
        dog.run();
        cat.eat();
        cat.paly();
        cat.run();
    }
}

结果为

小狗正在吃饭
小狗正在玩耍
小狗跑步
小猫正在吃饭
小猫正在玩耍
小猫跑步

使用简单工厂的方式

新建一个工厂类

public class AnimalFactory {
    private Animal animal;

    public Animal createAnimal(String name) {
        switch (name) {
            case "猫":
                animal = new Cat(name);
                break;
            case "狗":
                animal = new Dog(name);
                break;
        }
        return animal;
    }
}

工厂类中包含了一个Animal的接口以及一个createAnimal的方法,当外部调用此方法给工厂传入参数时,通过switch判断自动返回传入参数对应的实例

工厂类的实现

public class Zoo {
    public static void main(String[] args) {
        AnimalFactory animalFactory=new AnimalFactory();
        Animal animal=animalFactory.createAnimal("狗");
        animal.eat();
        animal.paly();
        animal.run();
    }
}

结果为

狗正在吃饭
狗正在玩耍
狗跑步

总结

通过两种实现方式的对比可发现,第一种直接实现,客户端需要知道Dog类、Cat类。分别去实例化之后才能调用。而第二种通过简单工厂就只需要明确自己要什么实例通过工厂AnimalFactory自动装配,因此只需要知道一个AnimalFactory,通过此工厂方法createAnimal即可生成对应对应实例。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值