ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

三种工厂设计模式

2022-07-18 22:04:23  阅读:141  来源: 互联网

标签:return class 工厂 Phone 三种 new 设计模式 public


三种工厂模式

我们平时说的工厂设计模式包含简单工厂工厂模式,工厂方法模式和抽象工厂模式。

总结就是如下:

  • 简单工厂:一个工厂类仅有1个生产方法,可以依据产品类型,生产一系列的多种产品。
  • 工厂方法:一个工厂类仅有1个生产方法,仅能生产一种商品。但是可以多个工厂类。
  • 抽象工厂:一个工厂类可以有多个生产方法,每个生产方法仅能生产1个系列的产品。

简单工厂

  • 优点

简单工厂,顾名思义简单,开发起来迅速。

Show Me The Code

interface Phone {
}

class MiPhone implements Phone {
}

class IPhone implements Phone {
}

public class SimplePhoneFactory {
    public static Phone build(String type) {
        if ("mi".equals(type)) {
            return new MiPhone();
        } else if ("apple".equals(type)) {
            return new IPhone();
        }

        // "还不支持代工这个手机品牌"
        return null;
    }
}

// 生产一台小米手机
Phone miPhone = SimplePhoneFactory.build("mi");
// 生产一台苹果手机
Phone iphone = SimplePhoneFactory.build("apple");

那生产一台魅族手机呢?是不是去生产方法里,添加魅族的类型即可呢。确实是这样。

那有没有到他的缺点呢?不遵循开闭原则,开闭原则讲的是对扩展开放,对修改关闭。我们新增魅族就是扩展,增加就要修改旧方法,那就不符合修改关闭原则。

工厂方法

  • 特点

工厂方法,准确来说应该叫做抽象工厂方法。因为本类不负责生产对象,而将生产对象的任务交给子类来完成。

大家看到这里有没有觉得跟模板方法相似,模板方法也是本类中定义好流程,具体的实现交给子类来完成。

既然叫工厂方法,重点就在子类实现工厂方法。

Show Me The Code

public class PhoneFactory {
    public abstract Phone build();
}

class MiFactory extends PhoneFactory {
    @Override
    public Phone build() {
        return new MiPhone();
    }
}

class AppleFactory extends PhoneFactory {
    @Override
    public Phone build() {
        return new IPhone();
    }
}

// 生产一台小米手机
Phone miPhone = new MiFactory().build();
// 生产一台苹果手机
Phone iphone = new AppleFactory().build();

看到工厂方法的优势了吧,假如要生产魅族手机,只需要新增一个魅族手机工厂即可。不要修改旧代码。

抽象工厂

Show Me The Code

interface Pad {
}

class MiPad implements Pad {
}

class IPad implements Pad {
}

public abstract class AbstractFactory {
    public abstract Phone buildPhone();

    public abstract Pad buildPad();
}

class MiFactory extends AbstractFactory {
    @Override
    public Phone buildPhone() {
        return new MiPhone();
    }

    @Override
    public Pad buildPad() {
        return new MiPad();
    }
}

class AppleFactory extends AbstractFactory {
    @Override
    public Phone buildPhone() {
        return new IPhone();
    }

    @Override
    public Pad buildPad() {
        return new IPad();
    }
}

// 生产一台小米手机
Phone miPhone = new MiFactory().buildPhone();
// 生产一台小米pad
Pad pad = new MiFactory().buildPad();
// 生产一台苹果手机
Phone iphone = new AppleFactory().buildPhone();
// 生产一台ipad
Pad ipad = new AppleFactory().buildPad();

其实上面这些抽象类,你改为接口也是可以的。

标签:return,class,工厂,Phone,三种,new,设计模式,public
来源: https://www.cnblogs.com/okbuok/p/16492164.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有