设计模式——工厂模式

前言

工厂模式算是自己接触到的最早的一个设计模式了,大二的时候在网易公开课上学习Java基础。从那时起到现在工作快2个月了,也在各大框架上接触工厂模式,在看《Head First设计模式》的时候,越来越觉得这本书不适合我了,不说题外话开始整理吧。

简单工厂模式(Simple Factory Pattern)

简单工厂模式又称为静态工方法模式,这算是我觉得目前最好理解的一种设计模式了。简单工厂方法并不在我们熟知的23种设计模式之中,根据网络上的说法,这更像一种编程习惯。
定义:
你只需传入一个正确的参数,就能按照你的意愿创建出一个对象。例如:我想要一个NewDuck对象,那我只要传入一个"NewDuck"字符串即可。

Duck和实现类略

public class DuckFactory {
    /**
     * 创建鸭子
     *
     * @param className  想创建的类名
     * @return  想创建类
     */
    public Duck createDuck(String className) {
    	//利用向上转型技术完成,我是这样理解的
        Duck duck;

        if ("NewDuck".equals(className)) {
        	//创建NewDuck类
            duck = new NewDuck();
        } else {
        	//创建GaGa类
            duck = new GaGa();
        }
        return duck;
    }
}

根据上面的代码,我简单画一下UML的类图(刚开始用VS画的有点丑,别介意)
在这里插入图片描述

通过FactoryDuck可以创建出Duck的子类——NewDuck和GaGa,通过箭头也可以看出,DuckFactory和子类的关系是依赖关系,当我们需要增加新的子类的时候,就需要对工厂类进行修改,当子类数量达到一定程度的时候,逻辑判断和维护就会出现一定困难了。当所需要创建的子类类型少的时候,就可以使用简单工厂模式了。

工厂方法模式(Factory Method Pattern)

工厂方法模式又称为工厂模式或多态工厂模式,它属于创建型模式。在工厂模式中父类负责定义创建产品对象的公共集合,而子类工厂负责创建具体的产品。
举一个例子:现在要创建Shap这个超类,而三角形、圆形等类实现这个类。

public interface Shap {
    public void display();
}
public class Triangle implements Shap {

    @Override
    public void display() {
        System.out.println("I'm a triangle");
    }
}

按照上面字面的意思创建一个父类工厂ShapFactory

public interface ShapFactory {

    Shap getFactory();
}

创建具体子类的工厂TriangleFactory

public class TriangleFactory implements ShapFactory {

    @Override
    public Shap getFactory() {
        return new Triangle();
    }
}

测试代码

public class Main {
    public static void main(String[] args) {
        ShapFactory factory = new TriangleFactory();
        Shap triangle = factory.getFactory();
        triangle.display();
    }
}

在这里插入图片描述
已经输出了Triangle类的display方法了

结构图
在这里插入图片描述
概括
当需要增加新的产品时,工厂方法模式只需新增子类和子类工厂,父类中方法不需要变更,解决了简单工厂的开闭原则

抽象工厂模式(Abstract Factory Pattern)

关于这个设计模式,我建议大家去这里看,这里讲得很清楚——传送门
简单工厂和工厂方法都是创建一个类,但是抽象工厂能创建多个产品。

这两个我这几天补上去

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值