工厂模式分为简单工厂模式、抽象工厂模式、工厂方法模式,其中前两个是我们经常会用到的,那我们就来探讨一下前两种设计模式。
工厂模式是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
应用逻辑:你从厂里提货,厂里有各种各样的货物,想要什么直接拿就好,无需知道它是怎么制造的。
优点: 1、一个调用者想创建一个对象,只要知道其名称就可以了。 2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。 3、屏蔽产品的具体实现,调用者只关心产品的接口。
好,我们来看看简单工厂模式和抽象工厂模式是怎么实现的。代码很简单,理解起来不难。
简单工厂模式
定义一个接口
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();
}
}
抽象工厂模式
抽象工厂模式和简单工厂模式在定义上基本是相同的。都是把核心放在一个实类上。抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类。
产品类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();
}
}
笔者能力有限,不足之处欢迎指出!