工厂模式

1.简单工厂模式:接口单一,只提供创建实例的功能

public class SimpleFatory{

    public Car getName(String tag){

        if("BMW".equals(tag)){
        
             return new BMWCar();
  
         }else if("AODI".equals(tag)){

             return new AODICar();  
         }else {

             return null;
        }

    }

}

public Interface Car{
   String getName();
}

public class BMWCar implements Car{
    @Override
    public String getName(){ return "BMW";}

}

public class AODICar implements Car{
    @Override
    public String getName(){ return "AODI";}

}

缺点:

         1.这个世界存在什么都生产的工厂吗?

         2.随着具体的实例对象多时,方法过于臃肿,维护起来更恐怖

因为专一,所以专业,这个时候工厂方法就出现了

2.工厂方法模式

// 生成车的工厂类
public interface Factory{
        Car getCar();
}

public BMWFactory implements Factory{

        @Override
        public Car getCar(){
        
            return new BMWCar();

        }

}


public AUDIFactory implements Factory{

        @Override
        public Car getCar(){

            return new AUDICar();
        }

}

public static void main(String [] args){

        Factory factory1 = new BMWFactory();
        System.out.println(factory1.getCar());

        Factory factory2 = new AUDIFactory ();
        System.out.println(factory2.getCar());
}

缺点:当一个人想要去买一辆宝马汽车的时候,那么他就要去找宝马工厂给他生产一辆;过几天又想要买一辆奔驰汽车的时候,又得跑到奔驰工厂请人生产,这无疑就增加了用户的操作复杂性

工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品

这个时候抽象工厂模式就出现了

3.抽象工厂模式

组合单个工厂模式抽象出来的一个可以解决某些问题的一个抽象的类,其实就是一个抽象类中包含多个不同等级的产品(一个等级的产品就是一个工厂模式)

比如农场 包含 动物、植物等,那么抽象出来的农场类中 包含动物类和植物类。单个的动物又能抽象出来一个动物的生成工厂,植物也是一样。

// 动物类
public interface Animal{
  void getName(); 
}

// 植物类
public interface Plant{
  void getName(); 
}

// 抽象工厂类 农场
public interface Farm{
     Animal createAnimal();
     Plant  createPlant();
}

// 声明一个统一管理有关农场的控制类,面向接口编程,控制大局走向。这样如果进行动物、植物的扩展,只需要继承对应的抽象类即可,逻辑不用更改。

优缺点

  1. 当增加一个新的产品族时只需增加一个新的具体工厂,不需要修改原代码,满足开闭原则。
  2. 当产品族中需要增加一个新种类的产品时,则所有的工厂类都需要进行修改,不满足开闭原则。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值