Java设计模式-工厂设计模式

最近经理让我们整理一下java的设计模式看了许多网上的PPT,文档,感觉这些模式还是写在例子中才能更快的理解它的用法。
好了废话不多说了直接上代码
假如我们要做个生产鱼的工厂

1.首先我们需要实体类鱼作为我们要生产的东西

public abstract class Fish {
   public abstract String introduce();//介绍
   public abstract String swim();//游泳
   public abstract String eat();//吃饭
}

在这里我们的鱼有介绍,游泳,吃饭三个方法,下面我们做出他们的具体实例
素食鱼VegetarianFish

public class VegetarianFish extends Fish{
    @Override
    public String swim() {
        return "游得缓慢";
    }
    @Override
    public String eat() {
        return "只吃一些草或藻类植物";
    }
    @Override
    public String introduce() {
        return "我是素食鱼属性如下:";
    }
}

肉食鱼CarnivorousFish

public class CarnivorousFish extends Fish{
    @Override
    public String swim() {
        return "能飞快的游动并且在最短时间内抓住猎物";
    }
    @Override
    public String eat() {
        return "只对肉感兴趣";
    }
    @Override
    public String introduce() {
        return "我是肉食鱼属性如下:";
    }
}

2.有了我们的产品模型我们需要一个工厂来生产它
我们的工厂如下:

public class Factory {
    public Fish create(String need) {
        switch (need) {
        case "meat":
            return new CarnivorousFish();
        case "greens":
            return new VegetarianFish();
        }
        return null;
    }
}

上面就是我们的工厂根据客户的需求生产出我们需要的产品(Fish)

3.最后就是我们的客户买鱼的过程了
代码如下

public class Test {
    public static void main(String[] args) {
        Factory facctory=new Factory();
        Fish fish=facctory.create("meat");
        System.out.println(fish.introduce()+"\n吃饭:"+fish.eat()+"\n游泳:"+fish.swim());
        Fish fish2=facctory.create("greens");
        System.out.println(fish2.introduce()+"\n吃饭:"+fish2.eat()+"\n游泳:"+fish2.swim());
    }
}

到此我们的工厂就创建完了

总结一下我们的工厂模式即将一个对象(fish)推给了另一个对象(factory)创建有什么好处呢?

1.解除了客户跟产品(Fish)之间的耦合

2.工厂跟客户是1对多的关系,工厂跟产品也是1对多关系,这样我们的工厂既可以生产多种样品(有许多Fish的实现),也可以对应多个客户(根据客户的不同需求生产不同的Fish)

3.提高了聚合度(Fish的职责根据自身特点提供相应功能,factory的职责是根据用户的需求)

缺点
不完全符合OCP开放封闭原则(扩展应开放,修改应封闭),要增加一个新的产品类,必须相应修改工厂类的方法。

Java设计原则
1.高内聚,低耦合
2.单一职责

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值