设计模式—工厂模式

工厂模式

一. 简单工厂模式

这个模式本身比较简单,可以使用在业务较简单的情况下!

1. 抽象一个基类或者接口
public abstract class Computer {
}
2. 多个实现类
public class HUAWEIComputer extends Computer {
}
public class LenovoComputer extends Computer {
}
3. 工厂类最顶层的抽象类
public abstract class FactoryAbstract {
    public abstract Computer create();
}
4. 各个实现类的工厂类
public class HUAWEIComputerFactory extends FactoryAbstract {
    @Override
    public Computer create(){
        return new HUAWEIComputer();
    }
}
public class LenovoComputerFactory extends FactoryAbstract {
    @Override
    public Computer create(){
        return new LenovoComputer();
    }
}

二. 工厂方法模式

工厂方法模式主要解决产品扩展的问题

工厂方法模式(Fatory Method Pattern)是通过实现类的工厂类来决定实例化哪个实现类的,工厂方法让类的实例化推迟到子类中进行。在工厂方法模式中用户只需要关心所需产品对应的工厂,无须关心创建细节,而且加入新的产品符 合开闭原则

1. 抽象一个基类或者接口
public abstract class Computer {
}
2. 多个实现类
public class HUAWEIComputer extends Computer {
}
public class LenovoComputer extends Computer {
}
4. 多个实现类的工厂类
public class LenovoComputerFactory extends FactoryAbstract {
    @Override
    public Computer create(){
        return new LenovoComputer();
    }
}
public class HUAWEIComputerFactory extends FactoryAbstract {
    @Override
    public Computer create(){
        return new HUAWEIComputer();
    }
}

总结

在简单工厂中,随着产品链的丰富,但是如果每个 产品的创建逻辑有区别的话,工厂的职责会变得越来越多,有点像万能工厂,并不便于维护,工厂方法模式就解决了这种问题,每个实现类都有自己的工厂,专人做专事

工厂方法的缺点:

  1. 类的个数容易过多,增加复杂度。

  2. 增加了系统的抽象性和理解难度

三. 抽象工厂模式

抽象工厂模式要比工厂方法模式复杂一点,工厂方法模式类似于一对多的关系,抽象工厂模式就像是多对多的关系,类似于多个产品,多个不同的品牌

打个比方:华为不仅仅生产电脑,还生产手机… 联想也是… …也是

这种就可以使用抽象工厂模式

1. 多个产品的抽象类
public abstract class Computer {
}
public abstract class Phone {
}
2. 多个品牌的实现多个产品

华为:

public class HUAWEIComputer extends Computer {
}
public class HUAWEIPhone extends Phone {
}

联想:

public class LenovoComputer extends Computer {
}
public class LenovoPhone extends Phone {
}
3. 工厂类的顶级抽象类
public abstract class Factory {
    public abstract Phone createPhone();
    public abstract Computer createComputer();
}
4. 各个品牌的工厂类
public class HUAWEIFactory extends Factory {
    @Override
    public Phone createPhone() {
        return new HUAWEIPhone();
    }
    @Override
    public Computer createComputer() {
        return new HUAWEIComputer();
    }
}
public class LenovoFactory extends Factory {
    @Override
    public Phone createPhone() {
        return new HUAWEIPhone();
    }
    @Override
    public Computer createComputer() {
        return new HUAWEIComputer();
    }
}

抽象工厂模式很清楚的展示了多个产品和多个工厂的关系。但是,如果再继续扩展产品,那么代码从抽象工厂,到具体工厂要全部修改,很显然不符合开闭原则。因此抽象工厂也是 有缺点的:

  1. 规定了所有可能被创建的产品集合,产品族中扩展新的产品困难,需要修改抽象工厂 的接口
  2. 增加了系统的抽象性和理解难度。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值