浅谈工厂设计模式 - java

工厂模式分为简单工厂模式、抽象工厂模式、工厂方法模式,其中前两个是我们经常会用到的,那我们就来探讨一下前两种设计模式。

工厂模式是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

应用逻辑:你从厂里提货,厂里有各种各样的货物,想要什么直接拿就好,无需知道它是怎么制造的。

优点: 1、一个调用者想创建一个对象,只要知道其名称就可以了。 2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。 3、屏蔽产品的具体实现,调用者只关心产品的接口。
好,我们来看看简单工厂模式和抽象工厂模式是怎么实现的。代码很简单,理解起来不难。

<big>简单工厂模式</big>

定义一个接口
public interface Shape {

   void say();

}
实现类A
public class ShapeA implements Shape{

    @Override
    public void say() {
        System.out.println("我是ShapeA");
    }

}
实现类B
public class ShapeB implements Shape{

    @Override
    public void say() {
        System.out.println("我是ShapeB");
    }

}
实现类C
public class ShapeC implements Shape{

    @Override
    public void say() {
        System.out.println("我是ShapeC");
    }

}
工厂类
public class Factory {
    
    public static final String ShapeA = "ShapeA";
    public static final String ShapeB = "ShapeB";
    public static final String ShapeC = "ShapeB";
    
    public static Shape getShape(String string){
        switch (string){
            case Factory.ShapeA:return new ShapeA();
            case Factory.ShapeB:return new ShapeB();
            case Factory.ShapeC:return new ShapeC();
            default:return null;
        }
    }
}
测试类
public class Text {

    public static void main(String... strings){
        Shape shape = Factory.getShape(Factory.ShapeA);
        shape.say();
    }

}

<big>抽象工厂模式</big>
抽象工厂模式和简单工厂模式在定义上基本是相同的。都是把核心放在一个实类上。抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类。

产品类A,注意这里并没有实现接口!
public class A {

    @Override
    public void say() {
        System.out.println("我是A");
    }

}
产品类B
public class B {

    @Override
    public void say() {
        System.out.println("我是B");
    }

}
产品类C
public class C {

    @Override
    public void say() {
        System.out.println("我是C");
    }

}
抽象工厂类
abstract class Factory {

    abstract A getA();
    
    abstract B getB();
    
    abstract C getC();

}
抽象工厂实现类
public class FactoryRealize extends Factory {
    @Override
    A getA() {
        return A();
    }

    @Override
    B getB() {
        return B();
    }

    @Override
    C getC() {
        return C();
    }
    
}
测试类
public class Text {

    public static void main(String... strings){
        FactoryRealize factoryRealizef = new FactoryRealize();
        A a = factoryRealizef.getA();
        a.say();
    }

}

笔者能力有限,不足之处欢迎指出!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 设计模式汇总 一、基础知识 1. 设计模式概述 定义:设计模式(Design Pattern)是一套被反复使用、多...
    MinoyJet阅读 9,399评论 1 15
  • 1 场景问题# 1.1 选择组装电脑的配件## 举个生活中常见的例子——组装电脑,我们在组装电脑的时候,通常需要选...
    七寸知架构阅读 9,885评论 6 67
  • 一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者...
    RamboLI阅读 4,132评论 0 1
  • 1.接口基础回顾 设计模式六大原则,其中依赖倒转原则,强调我们应该面向接口编程,那什么是接口?接口的作用? 接口如...
    孟婆汤不解渴阅读 4,308评论 0 3
  • 母爱 女儿眼睛从出生不久后一直眼屎多,在上海的时候去过两次医院,医生说可能是结膜炎,开了眼药水慢慢滴,有了明显好转...
    中宵起舞阅读 1,738评论 0 0

友情链接更多精彩内容