工厂模式的java代码实现

工厂模式是一种常用的创建型模式,它定义了一个用于创建对象的接口,让子类决定实例化哪一个类。工厂模式使得一个类的实例化延迟到其子类。

在 Java 中,工厂模式有三种实现方式:简单工厂模式、工厂方法模式和抽象工厂模式。下面分别介绍这三种实现方式的具体实现。

简单工厂模式

简单工厂模式又称为静态工厂方法模式,它通过一个工厂类创建不同类型的对象,属于创建型模式。下面是一个简单的示例代码:

// 抽象产品类
interface Product {
    void show();
}

// 具体产品类A
class ConcreteProductA implements Product {
    @Override
    public void show() {
        System.out.println("ConcreteProductA");
    }
}

// 具体产品类B
class ConcreteProductB implements Product {
    @Override
    public void show() {
        System.out.println("ConcreteProductB");
    }
}

// 工厂类
class Factory {
    public static Product createProduct(String type) {
        if (type.equals("A")) {
            return new ConcreteProductA();
        } else if (type.equals("B")) {
            return new ConcreteProductB();
        } else {
            throw new RuntimeException("Invalid product type");
        }
    }
}

// 客户端代码
public class SimpleFactoryDemo {
    public static void main(String[] args) {
        Product productA = Factory.createProduct("A");
        Product productB = Factory.createProduct("B");
        productA.show();
        productB.show();
    }
}

在上面的代码中,Product 是一个抽象产品类,ConcreteProductAConcreteProductB 是具体的产品类,实现了 Product 接口。Factory 是工厂类,通过静态方法 createProduct 来创建不同类型的产品对象。客户端代码可以通过调用 Factory.createProduct 方法来获取具体的产品对象,并调用它们的 show 方法。

工厂方法模式

工厂方法模式是简单工厂模式的一种升级版,它定义了一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使得一个类的实例化延迟到其子类。下面是一个示例代码:

// 抽象产品类
interface Product {
    void show();
}

// 具体产品类A
class ConcreteProductA implements Product {
    @Override
    public void show() {
        System.out.println("ConcreteProductA");
    }
}

// 具体产品类B
class ConcreteProductB implements Product {
    @Override
    public void show() {
        System.out.println("ConcreteProductB");
    }
}

// 抽象工厂类
interface Factory {
    Product createProduct();
}

// 具体工厂类A
class ConcreteFactoryA implements Factory {
    @Override
    public Product createProduct() {
        return new ConcreteProductA();
    }
}


// 具体工厂类B
public class ConcreteFactoryB implements Factory {
    @Override
    public Product createProduct() {
        return new ConcreteProductB();
    }
}
// 客户端
public class Client {
    public static void main(String[] args) {
        Factory factoryA = new ConcreteFactoryA();
        Product productA = factoryA.createProduct();
        productA.operation();

        Factory factoryB = new ConcreteFactoryB();
        Product productB = factoryB.createProduct();
        productB.operation();
    }
}

在上述示例中,我们通过具体工厂类 ConcreteFactoryAConcreteFactoryB 来创建具体产品对象 ConcreteProductAConcreteProductB。客户端代码只依赖于抽象工厂接口和抽象产品接口,而不依赖于具体的产品类和具体的工厂类。这样可以提高代码的灵活性和可维护性。

工厂方法模式相对于简单工厂模式的优势在于,它将工厂的职责拆分到了多个具体工厂类中,每个具体工厂类负责创建自己对应的产品对象。这样可以更加方便地扩展和修改产品对象的创建方式,并且也可以降低工厂类的复杂度。

抽象工厂模式

象工厂模式也是一种创建型设计模式,它提供了一个接口,用于创建一系列相关或相互依赖的对象,而无需指定具体的类。下面是一个简单的抽象工厂模式的 Java 实现示例:

public interface ProductA {
    void operationA();
}

public interface ProductB {
    void operationB();
}
public class ConcreteProductA1 implements ProductA {
    @Override
    public void operationA() {
        System.out.println("ConcreteProductA1 operationA");
    }
}

public class ConcreteProductA2 implements ProductA {
    @Override
    public void operationA() {
        System.out.println("ConcreteProductA2 operationA");
    }
}

public class ConcreteProductB1 implements ProductB {
    @Override
    public void operationB() {
        System.out.println("ConcreteProductB1 operationB");
    }
}

public class ConcreteProductB2 implements ProductB {
    @Override
    public void operationB() {
        System.out.println("ConcreteProductB2 operationB");
    }
}
public interface AbstractFactory {
    ProductA createProductA();
    ProductB createProductB();
}
public class ConcreteFactory1 implements AbstractFactory {
    @Override
    public ProductA createProductA() {
        return new ConcreteProductA1();
    }

    @Override
    public ProductB createProductB() {
        return new ConcreteProductB1();
    }
}

public class ConcreteFactory2 implements AbstractFactory {
    @Override
    public ProductA createProductA() {
        return new ConcreteProductA2();
    }

    @Override
    public ProductB createProductB() {
        return new ConcreteProductB2();
    }
}
public class Client {
    public static void main(String[] args) {
        AbstractFactory factory1 = new ConcreteFactory1();
        ProductA productA1 = factory1.createProductA();
        ProductB productB1 = factory1.createProductB();
        productA1.operationA();
        productB1.operationB();

        AbstractFactory factory2 = new ConcreteFactory2();
        ProductA productA2 = factory2.createProductA();
        ProductB productB2 = factory2.createProductB();
        productA2.operationA();
        productB2.operationB();
    }
}

在上述示例中,我们通过具体工厂类 ConcreteFactory1ConcreteFactory2 来创建一系列相关的产品对象。客户端代码只依赖于抽象工厂接口和抽象产品接口,而不依赖于具体的产品类和具体的工厂类。这样可以提高代码的灵活性和可维护性。

抽象工厂模式相对于工厂方法模式的优势在于,它可以创建一系列相关或相互依赖的产品族,而不是单一的产品对象。这样可以更加方便地保证产品族之间的一致性和兼容性。但是抽象工厂模式的缺点在于,当需要增加新的产品族时,需要修改抽象工厂接口和所有具体工厂类的实现,这可能会导致较大的代码改动。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 中常见的设计模式有很多,下面列举几个比较常用的设计模式,并附上相应的 Java 代码实现: 1. 工厂模式 工厂模式是一种创建型设计模式,它用于创建对象而不需要指定具体类。在工厂模式中,我们创建对象而不是直接实例化对象,从而将类的实例化推迟到子类中。 ``` interface Shape { void draw(); } class Circle implements Shape { @Override public void draw() { System.out.println("Circle draw()"); } } class Square implements Shape { @Override public void draw() { System.out.println("Square draw()"); } } class ShapeFactory { public Shape getShape(String shapeType) { if (shapeType == null) { return null; } if (shapeType.equalsIgnoreCase("CIRCLE")) { return new Circle(); } else if (shapeType.equalsIgnoreCase("SQUARE")) { return new Square(); } return null; } } public class FactoryPatternDemo { public static void main(String[] args) { ShapeFactory shapeFactory = new ShapeFactory(); Shape circle = shapeFactory.getShape("CIRCLE"); circle.draw(); Shape square = shapeFactory.getShape("SQUARE"); square.draw(); } } ``` 2. 单例模式 单例模式是一种创建型设计模式,它保证一个类只有一个实例,并提供一个全局点访问该实例的方式。 ``` class Singleton { private static Singleton instance = new Singleton(); private Singleton() {} public static Singleton getInstance() { return instance; } public void showMessage() { System.out.println("Hello World!"); } } public class SingletonPatternDemo { public static void main(String[] args) { Singleton instance = Singleton.getInstance(); instance.showMessage(); } } ``` 3. 装饰器模式 装饰器模式是一种结构型设计模式,它允许我们动态地添加功能到对象中。在装饰器模式中,我们将对象包装在一个装饰器类中,并且在运行时添加功能。 ``` interface Shape { void draw(); } class Circle implements Shape { @Override public void draw() { System.out.println("Circle draw()"); } } class Square implements Shape { @Override public void draw() { System.out.println("Square draw()"); } } abstract class ShapeDecorator implements Shape { protected Shape decoratedShape; public ShapeDecorator(Shape decoratedShape) { this.decoratedShape = decoratedShape; } public void draw() { decoratedShape.draw(); } } class RedShapeDecorator extends ShapeDecorator { public RedShapeDecorator(Shape decoratedShape) { super(decoratedShape); } public void draw() { decoratedShape.draw(); setRedBorder(decoratedShape); } private void setRedBorder(Shape decoratedShape) { System.out.println("Border Color: Red"); } } public class DecoratorPatternDemo { public static void main(String[] args) { Shape circle = new Circle(); Shape redCircle = new RedShapeDecorator(new Circle()); Shape redSquare = new RedShapeDecorator(new Square()); circle.draw(); redCircle.draw(); redSquare.draw(); } } ``` 以上是三种常见的设计模式的 Java 实现,如果需要了解更多设计模式,可以参考《Head First 设计模式》一书。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值