浅谈工厂模式以及抽象工厂模式

前言

设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。
之前以及说过比较简单的单例模式了,今天来聊一下工厂模式和抽象工厂模式

工厂模式

大概结构

在这里插入图片描述

我们随便实现一下

接口Shape(形状)

public interface Shape {
    void drow();
}

定义实体类实现接口
实体类Circular(圆)

public class Circular implements Shape{
    @Override
    public void drow() {
        System.out.println("圆对象");
    }
}

实体类Rectangle(矩形)

public class Rectangle implements Shape{
    @Override
    public void drow() {
        System.out.println("矩形对象");
    }
}

创建工厂ShapeFactory

public class ShapeFactory{
	public Shape getShape(String shapeType){
        if(shapeType==null)
            return null;
        if(shapeType.equals("圆"))
            return new Circular();
        if(shapeType.equals("矩形"))
            return new Rectangle();
        return null;
    }
}

可以看到我们定义String类型参数获取数据进行对比从而从工厂选择合适对象创建
我们只需要在主方法创建形状工厂对象

ShapeFactory shapeFactory=new ShapeFactory();

然后通过对其中getShape()方法的调用即可创建相应的形状对象

Shape shape=shapeFactory.getShape("矩形");
Shape shape1=shapeFactory.getShape("圆");

然后通过对象名shape,shape,即可操纵对应的对象

抽象工厂模式

如果说工厂模式是儿子,那么抽象工厂模式无疑就是爸爸了
主要就是对我们的工厂进行抽象化,其实工厂本身就是很抽象的,我们可以有手机厂,汽车厂等等

大概结构

在这里插入图片描述

我们随便实现一下

首先让我们的厂抽象起来
两个抽象方法分别获取一个工厂

public abstract class AbstractFactory {
    public abstract Color getColor(String colorType);
    public abstract Shape getShape(String shapeType);
}

上面已经有一个厂了,我们创建新厂的接口和实体类

/**
 * 接口,颜色
 */
public interface Color {
    void drow();
}
/**
 * 实体类,颜色,红
 */
public class Red implements Color{
    @Override
    public void drow() {
        System.out.println("drow:红");
    }
}
/**
 * 实体类,颜色,蓝
 */
public class Blue implements Color{
    @Override
    public void drow() {
        System.out.println("drow:蓝");
    }
}

对两个厂重写抽象方法

/**
 * 形状工厂
 */
public class ShapeFactory extends AbstractFactory{
    @Override
    public Color getColor(String colorType) {
        return null;
    }
    @Override
    public Shape getShape(String shapeType){
        if(shapeType==null)
            return null;
        if(shapeType.equals("圆"))
            return new Circular();
        if(shapeType.equals("矩形"))
            return new Rectangle();
        return null;
    }
}
/**
 * 颜色工厂
 */
public class ColorFactory extends AbstractFactory{
    @Override
    public Shape getShape(String shapeType) {
        return null;
    }
    @Override
    public Color getColor(String colorType){
        if(colorType==null)
            return null;
        if(colorType.equals("红"))
            return new Red();
        if(colorType.equals("蓝"))
            return new Blue();
        return null;
    }
}

对工厂进行选择

/**
 * 获取工厂
 */
public class FactoryProducer {
    public static AbstractFactory getFactory(String choice){
        if(choice.equals("形状")){
            return new ShapeFactory();
        } else if(choice.equals("颜色")){
            return new ColorFactory();
        }
        return null;
    }
}

主方法中我们只需要创建获取工厂的对应对象

FactoryProducer factoryProducer=new FactoryProducer();

即可通过getFactory()方法获取对应工厂

 AbstractFactory colorFactory=factoryProducer.getFactory("颜色");
 AbstractFactory shapeFactory=factoryProducer.getFactory("形状");

然后再通过getColor()以及getShape()方法获取某颜色或是某形状对象

        Color color=colorFactory.getColor("蓝");
        Shape shape=shapeFactory.getShape("圆");

写在最后

大概就是这么个东西了,理解起来还是比较容易的,具体优缺点这些大家可以参考:菜鸟
最后还是欢迎大家可以一起学习,一起进步

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值