首页 > 编程语言 > 详细

Java设计模式之抽象工厂模式

时间:2021-03-14 23:51:48      阅读:26      评论:0      收藏:0      [点我收藏+]

我们都知道设计模式有五大原则

  1. 单一职责原则:实现类要职责单一。
  2. 开闭原则:对扩展开放,对修改关闭。
  3. 里氏替换原则:不要破坏继承体系。
  4. 接口隔离原则:设计接口的时候要精简单一。
  5. 依赖倒置原则:要面向接口编程。

了解完设计模式的五大原则后,因为简单工厂模式即是利用工厂来返回所需的实例化对象,而工厂方法则是利用实现接口后的对象工厂来返回实例化的对象。而前两种都有一定的缺点

  1. 简单工厂模式(静态工厂模式):违反了开闭原则,耦合度较高
  2. 工厂方法模式:属于多态工厂模式,定义创建产品对象的工厂接口,将实际创建工作推迟到子类中,但调用类出现创建对象逻辑,违背单一职责原则,增加了项目开发的复杂度

抽象工厂模式

产品接口和实现类

public interface Engine {  //举例引擎,其他的省略

    void run();
}

class HighEndEngine implements Engine {

    @Override
    public void run() {
        System.out.println("高端发动机,启动快");
    }
    
}

class LowEndEngine implements Engine {
    @Override
    public void run() {
        System.out.println("低端发动机,启动慢");
    }
}

工厂接口

public interface CarFactory {

    Engine createEngine();
    
    Tyre createTyre();
    
    Seat createSeat();
}

工厂实现类

public class HighEndCarFactory implements CarFactory {

    @Override
    public Engine createEngine() {
        return new HighEndEngine();
    }

    @Override
    public Tyre createTyre() {
        return new HighEndTyre();
    }

    @Override
    public Seat createSeat() {
        return new HighEndSeat();
    }


}

public class LowEndCarFactory implements CarFactory {

    @Override
    public Engine createEngine() {
        return new LowEndEngine();
    }

    @Override
    public Tyre createTyre() {
        return new LowEndTyre();
    }

    @Override
    public Seat createSeat() {
        return new LowEndSeat();
    }

}

客户端调用

public class Client {

    public static void main(String[] args) {
        CarFactory cf = new HighEndCarFactory();
        
        Engine engine = cf.createEngine();
        
        Tyre tyre = cf.createTyre();
        
        Seat seat = cf.createSeat();
    }
}

简单理解,高端工厂类只制造高端产品,例如高端引擎、高端轮胎以及高端座椅等,当产品族中新增几个产品,只需创建产品类以及在对应的工厂类中添加对应的方法即可。

总结

在使用设计模式时,很难遵循五大原则和一大法则。我们使用设计模式是为了让代码具有可复用性、可扩展性和灵活性,不能一味地守着这几个规定,从而限制自己对编程的想象和发挥。因此,需要使用怎样的设计模式还得根据项目的实际需求来衡量选择。
这就跟我们的数据库三大范式一样,我们很难一样地遵循三大范式,有时候为了性能以及查询之类的效率,会增加点数据冗余。

Java设计模式之抽象工厂模式

原文:https://www.cnblogs.com/ryan-coder/p/14534545.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!