浅谈工厂设计模式 - 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();
    }

}

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

    原文作者:麦兜叮叮当
    原文地址: https://www.jianshu.com/p/ce9ce2a087df
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞