美文网首页
设计模式-工厂方法模式

设计模式-工厂方法模式

作者: 圣村的希望 | 来源:发表于2021-03-20 16:52 被阅读0次
工厂方法模式思维导图.png

1.介绍:

     工厂方法模式顾名思义就是创建产品的,这里的产品在Java程序里面就是一个个对象,该模式就是用于封装对象的创建,是一种创建型模式。根据抽象程度的不同,它又分为:简单工厂模式、工厂方法模式和抽象工厂模式。

2.代码实例:

2.1:简单工厂方法模式:

     简单工厂模式其实不属于设计模式中的一种,他是把对象创建的一个简单封装,根据传递的参数创建不同的对象。

  • 工厂生产的对象产品抽象
public interface Phone {
    void show();
}
  • 具体产品
public class IPhone implements Phone {

    public IPhone() {
        this.show();
    }

    @Override
    public void show() {
        System.out.println("make apple phone");
    }
}


public class MiPhone implements Phone {

    public MiPhone() {
        this.show();
    }

    @Override
    public void show() {
        System.out.println("make mi phone");
    }
}
  • 生产手机的简单工厂
public class SimpleFactory {

    //生产手机产品的静态方法
    public static Phone createPhone(String type) {
        if (type.equalsIgnoreCase("MiPhone")) {
            return new MiPhone();
        } else {
            return new IPhone();
        }
    }
}
  • 客户端使用简单工厂方法
public class Client {

    public static void main(String[] args) {
        Phone miPhone = SimpleFactory.createPhone("MiPhone");
        Phone iphone = SimpleFactory.createPhone("Iphone");
        System.out.println("miPhone type " + miPhone.getClass().getSimpleName());
        System.out.println("iphone type " + iphone.getClass().getSimpleName());
    }
}

//控制台输出:
make mi phone
make apple phone
miPhone type MiPhone
iphone type IPhone
  • 简单工厂方法UML类图展示:


    简单工厂方法类图.png

2.2:工厂方法模式:

     工厂方法模式是在简单工厂方法模式之上进行了一层抽象,把对象创建的方法抽象成一个接口,每一个具体的产品由一个具体的工厂来产生。

  • AbstractFactory类
public interface AbstractFactory {

    Phone createPhone();
}
  • MiPhonoeFactory类,生产MiPhone对象
public class MiPhoneFactory implements AbstractFactory {

    @Override
    public Phone createPhone() {
        return new MiPhone();
    }
}
  • IPhoneFactory类,生产IPhone对象
public class IPhoneFactory implements AbstractFactory {

    @Override
    public Phone createPhone() {
        return new IPhone();
    }
}
  • Client客户端的使用
public class Client {

    public static void main(String[] args) {
//        Phone miPhone = SimpleFactory.createPhone("MiPhone");
//        Phone iphone = SimpleFactory.createPhone("Iphone");
//        System.out.println("miPhone type " + miPhone.getClass().getSimpleName());
//        System.out.println("iphone type " + iphone.getClass().getSimpleName());


        AbstractFactory miPhoneFactory = new MiPhoneFactory();
        AbstractFactory iphoneFactory = new IPhoneFactory();
        Phone miPhone = miPhoneFactory.createPhone();
        Phone iphone = iphoneFactory.createPhone();
        System.out.println("miPhone type " + miPhone.getClass().getSimpleName());
        System.out.println("iphone type " + iphone.getClass().getSimpleName());
    }

//控制台输出:
make mi phone
make apple phone
miPhone type MiPhone
iphone type IPhone
  • 工厂方法模式UML类图展示:


    工厂方法模式UML类图.png

2.3抽象工厂方法模式:

     抽象工厂方法模式是在工厂方法模式之上再进行抽象的,抽象工厂不再是像工厂方法模式那样只生成一个产品,抽象工厂方法模式是生成一系列的配套产品。抽象工厂就类似小米这个品牌,它能够生成电脑、手机和手环等一系列配套的产品。

  • AbFactory类
public interface AbFactory {

    Phone createPhone();

    PC createPC();
}
  • PC产品
public interface PC {
    void show();
}

public class MiPC implements PC {

    public MiPC() {
        this.show();
    }

    @Override
    public void show() {
        System.out.println("make mi pc");
    }
}

public class MacPC implements PC {

    public MacPC() {
        this.show();
    }

    @Override
    public void show() {
        System.out.println("make mac pc");
    }
}
  • MiFactory
public class MiFactory implements AbFactory {

    @Override
    public Phone createPhone() {
        return new MiPhone();
    }

    @Override
    public PC createPC() {
        return new MiPC();
    }
}
  • AppleFactory
public class AppleFactory implements AbFactory {

    @Override
    public Phone createPhone() {
        return new IPhone();
    }

    @Override
    public PC createPC() {
        return new MacPC();
    }
}
  • Client客户端使用类
public class Client {

    public static void main(String[] args) {
//        Phone miPhone = SimpleFactory.createPhone("MiPhone");
//        Phone iphone = SimpleFactory.createPhone("Iphone");
//        System.out.println("miPhone type " + miPhone.getClass().getSimpleName());
//        System.out.println("iphone type " + iphone.getClass().getSimpleName());

//        AbstractFactory miPhoneFactory = new MiPhoneFactory();
//        AbstractFactory iphoneFactory = new IPhoneFactory();
//        Phone miPhone = miPhoneFactory.createPhone();
//        Phone iphone = iphoneFactory.createPhone();
//        System.out.println("miPhone type " + miPhone.getClass().getSimpleName());
//        System.out.println("iphone type " + iphone.getClass().getSimpleName());

        AbFactory miAbstractFactory = new MiFactory();
        AbFactory appleAbstractFactory = new AppleFactory();
        Phone miPhone = miAbstractFactory.createPhone();
        PC miPC = miAbstractFactory.createPC();
        Phone iphone = appleAbstractFactory.createPhone();
        PC macPC = appleAbstractFactory.createPC();
        System.out.println("miPhone type " + miPhone.getClass().getSimpleName());
        System.out.println("miPC type " + miPC.getClass().getSimpleName());
        System.out.println("iphone type " + iphone.getClass().getSimpleName());
        System.out.println("macPC type " + macPC.getClass().getSimpleName());
    }
}
  • 抽象工厂模式UML类图:


    抽象工厂模式.png

3.使用场景:

     简单工厂模式就是一个很简单的对对象创建的封装,工厂方法模式是对每一个具体产品创建的封装,每一个产品对应有一个具体的工厂来创建,而抽象工厂模式是针对一系列产品对象的创建。3种工厂模式是在抽象层度上的不同,对于不同场景选择不同的工厂模式进行对象创建的封装。

3.1: 工厂方法模式的使用:

     在Java中就有工厂方法模式的使用:线程工厂的封装就是用来创建线程池,具体的线程创建交给具体的工厂实现。

public interface ThreadFactory {

    Thread newThread(Runnable r);
}

相关文章

  • 2021-11-16 - 学习记录

    设计模式学习:创建型:工厂(工厂方法,抽象工厂),建造者,单例,原型 设计模式:工厂模式 简单工厂 工厂方法 抽象工厂

  • 工厂模式

    工厂模式 就是工厂---生产-->产品 在设计模式中,分为 简单工厂模式, 工厂方法模式,抽象工厂模式. 工厂模式...

  • PHP-浅谈单例模式和工厂模式

    PHP中常用的设计模式有单例模式、工厂模式(简单工厂模式、工厂方法模式和抽象工厂方法模式)、适配模式、策略模式。 ...

  • 设计模式-工厂模式

    设计模式1 设计模式2 工厂模式 工厂模式可简单的分为三类:简单工厂,工厂方法,抽象工厂 简单工厂模式 定义 简单...

  • 设计模式之工厂方法模式(创建型)

    一、模式定义 工厂方法模式:又称工厂模式,也叫虚拟构造器模式,属于构建型设计模式,工厂方法模式是在简单工厂模式上进...

  • spring 设计模式篇(前)

    设计模式俗称:套路 一、spring常见设计模式 (23种设计模式) 创建型:工厂方法模式、抽象工厂模式、建造者...

  • 设计模式系列-简单工厂模式

    JAVA设计模式系列: 单例模式 观察者模式 模板方法模式 简单工厂模式 定义 简单工厂模式又叫做静态工厂方法模式...

  • 简单工厂模式

    Android进阶之设计模式 简单工厂模式 简单工厂模式(又叫作静态工厂方法模式), 其属于创建型设计模式,但并不...

  • 设计模式之简单工厂、工厂方法、抽象工厂

    设计模式之简单工厂、工厂方法、抽象工厂 什么是设计模式? 设计模式(Design pattern)代表了最佳的实践...

  • 设计模式(六)抽象工厂模式

    导读:前文设计模式(五)工厂方法模式介绍了工厂方法模式,本篇开始介绍抽象工厂模式,继续优化工厂方法模式,更好的满足...

网友评论

      本文标题:设计模式-工厂方法模式

      本文链接:https://www.haomeiwen.com/subject/voswcltx.html