java简单例题实现工厂设计模式

目录

工厂模式介绍:

         例题:

第一步创建接口(Fruit.java):

第二步创建实现接口的子类:

第三步创建工厂:

最后一步:

输出效果:


工厂模式介绍:

工厂模式(Facory pattern)是java中常用的设计模式之一。这种类型的设计模式属于创建模型式,它提供了一种创建对象的最佳方式。

       在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口实现的。意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到其子类进行。主要解决接口选择问题的问题,我们明确地计划不同条件下创建不同实例时。让其子类实现工厂接口,返回的也是一个抽象的产品。

优点:我需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。

缺点:每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统种类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖,这并不是什么好事。

例题:

定义一个水果接口Fruit,其中包含有吃水果的方法eat(),定义两个子类,苹果类Apple和橘子类Orange,利用工厂设计模式定义一个工厂类Factory,其中包含有一个静态方法Fruitgetinstance(String classname),根据该方法的参数实例化子类对象并返回,给出测试类以测试子类"吃苹果"和"吃橘子"的行为。

第一步创建接口(Fruit.java):

public interface Fruit {
    //定义抽象方法吃水果
    void eat();

}

第二步创建实现接口的子类:

分别实现接口的eat方法。

public class Apple implements Fruit{
    public void eat(){
        System.out.println("Apple类中的eat方法--吃苹果");

    }
}
public class Orange implements Fruit{
    public void eat(){
        System.out.println("Orange中的eat方法---吃橘子");
    }
}

第三步创建工厂:

对类名进行合理的检测,如果合法就实例化子类

public class Factory {
    //识别不同的类名
    public static Fruit Fruitgetinstance(String classname){
        if(classname == null){
            return null;
        }
        if(classname.equals("Apple")){
           return new Apple();
        }else if (classname.equals("Orange")){
            return new Orange();
        }
        return null;
    }
}

最后一步:

使用静态的工厂方法,通过传递类型信息来获取实体类的对象。

public class TestFactory {
    public static void main(String[] args) {
         Fruit f1=Factory.Fruitgetinstance("Apple");
         Fruit f2 = Factory.Fruitgetinstance("Orange");
         f1.eat();
         f2.eat();
    }
}

输出效果:

写在最后:祝大家五一快乐!

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱德苏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值