工厂设计java_浅谈工厂设计模式 - java

本文探讨了Java中最常用的创建型设计模式——工厂模式,包括简单工厂模式和抽象工厂模式。简单工厂模式通过静态工厂方法创建对象,提供了一种隔离对象创建和使用的途径。抽象工厂模式则更进一步,提供了创建一系列相关对象的接口,无需指定具体类。这两种模式都具有高扩展性和封装性,便于维护和扩展。文章通过代码实例展示了它们的实现方式。
摘要由CSDN通过智能技术生成

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

工厂模式是 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();

}

}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值