Java设计模式之工厂模式(三种)

工厂模式

工厂模式

参考

<br />

1. 简单工厂

理解

  • 简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。
  • 不修改代码的话,是无法扩展的。

例子

  • 产品接口
//产品接口
public interface ProductI {
    public void productName();
}
  • 产品实体类
public class ProductA implements ProductI {
    @Override
    public void productName() {
        System.out.println("product A");
    }
}
public class ProductB implements ProductI {
    @Override
    public void productName() {
        System.out.println("product B");
    }
}
  • 工厂类
// 简单工厂模式
public class Factory {
    public ProductI create(String productName) {
        switch (productName) {
            case "A":
                return new ProductA();
            case "B":
                return new ProductB();
            default:
                return null;
        }
    }
}
  • 测试类
public class Client {
    public static void main(String[] args) {
        Factory factory = new Factory();
        ProductI productA = factory.create("A");
        productA.productName();
        //
        ProductI productB = factory.create("B");
        productB.productName();
    }
}
  • 输出

product A
product B

<br />

2. 工厂方法

理解

  • 工厂方法是针对每一种产品提供一个工厂类。通过不同的工厂实例来创建不同的产品实例。
  • 在同一等级结构中,支持增加任意产品

例子

  • 产品接口和产品实体类和简单工厂都一样。

  • 工厂接口

public interface FactoryI {
    // 工厂的目的是为了生产产品
    public ProductI create();
}
  • 工厂实体类
public class FactoryA implements FactoryI {
    @Override
    public ProductI create() {
        return new ProductA();
    }
}
public class FactoryB implements FactoryI {
    @Override
    public ProductI create() {
        return new ProductB();
    }
}
  • 测试类
// 工厂方法模式
public class Client {
    public static void main(String[] args) {
        FactoryI factoryA = new FactoryA();
        ProductI productA = factoryA.create();
        productA.productName();
        //
        FactoryI factoryB = new FactoryB();
        ProductI productB = factoryB.create();
        productB.productName();
    }
}
  • 输出

product A
product B

<br />

3. 抽象工厂

理解

  • 抽象工厂是应对产品族概念的。比如说,每个汽车公司可能要同时生产轿车,货车,客车,那么每一个工厂都要有创建轿车,货车和客车的方法。
  • 应对产品族概念而生,增加新的产品线很容易,但是无法增加新的产品。
  • 和工厂方法的区别是,抽象工厂往往有多种方法,可以生产多种产品,即产品簇。

例子

  • 抽象工厂类
// 抽线工厂模式
public interface AbstractFactory {
    public ProductAI createProductA();
    public ProductBI createProductB();
}
  • 工厂实体类
public class Factory1 implements AbstractFactory {
    @Override
    public ProductAI createProductA() {
        return new ProductA1();
    }

    @Override
    public ProductBI createProductB() {
        return new ProductB1();
    }
}
public class Factory2 implements AbstractFactory {
    @Override
    public ProductAI createProductA() {
        return new ProductA2();
    }

    @Override
    public ProductBI createProductB() {
        return new ProductB2();
    }
}
  • 产品接口
//产品接口
public interface ProductBI {
    public void productName();
}
//产品接口
public interface ProductAI {
    public void productName();
}
  • 产品实体类
public class ProductA1 implements ProductAI {
    @Override
    public void productName() {
        System.out.println("product A1");
    }
}

其余三个产品实体类,略。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,079评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,785评论 18 399
  • 小编费力收集:给你想要的面试集合 1.C++或Java中的异常处理机制的简单原理和应用。 当JAVA程序违反了JA...
    八爷君阅读 4,681评论 1 114
  • 面向对象的六大原则 单一职责原则 所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于...
    JxMY阅读 976评论 1 3
  • 欢快流淌的小河 是来自大山的问候 每一次与石子的激吻 仿佛指尖触碰琴弦 美妙的音符欢快的跳跃 那是对生命的礼赞 弯...
    梧桐更兼細雨阅读 455评论 0 2