设计模式——三大工厂

在学习设计模式的时候,我是先将《大话》整体的先浏览了一遍,然后按照分类去敲那些例子的,而不是整本书的先后顺序。第一次接触设计模式,感触还是比较深的,就像《大话》中开篇讲的一样:感受设计演变过程中所蕴含的大智慧,体会乐与怒的程序人生中值得回味的一幕幕。虽然领悟还没有达到那种境界,但在看设计模式的时候心里不禁为那些大牛们那些智慧的总结拍手叫好。以前只知道我们学的编程语言大多数是面向对象或者基于面向对象的,但究竟怎么个面向对象并不了解;学过UML,可能认得出一两张类图,但这些类图怎样在代码中表示却并不清楚;知道面向对象的好处是可维护、可复用、可扩展、灵活性好,但对怎样做才能达到期望的效果也所知甚少。就在这个时候,设计模式来了,他给迷茫中的“小菜”还有同样迷茫的我们指引了一条敞亮的金光大道。让我们认识到,编程不仅是敲完代码运行出结果就完事了的,编程是一门技术,更是一门艺术。废话多说了,先来介绍一下我刚学习过的三大工厂模式:简单工厂、工厂方法和抽象工厂模式。

        在正介绍上面的几个设计模式之前,先让我们来了解一下几个设计原则:

        ①OCP:(开放封闭原则,Open-Closed Principle)对于扩展是开放的,对于更改是封闭的。我的理解,对于一个系统,如果要扩展,应该在不修改已有代码的基础上进行。

        ②DIP(依赖倒转原则,Dependence Inversion Principle):针对接口编程,不要对实现编程。通俗一点,就是,对于不同层次的编程,高层次暴露给低层次的应当只是接口,而不是具体的类。

              

        简单工厂,工厂方法,抽象工厂都属于设计模式中的创建型模式。主要功能就是帮助我们把对象的实例化部分抽取了出来,从而优化了代码的架构,并且增强了系统的扩展性。

        ·简单工厂

        简单工厂的工厂类一般是使用静态方法,通过接收的参数不同来返回不同的实例。但是如果要想实现扩展的话,就需要更改源代码了。所以这一点是不符合我们说得OCP原则的。简单工厂中,包括一个“抽象产品类”,可以是class也可以是Interface,所有需要的产品类都是该“抽象产品类”的子类。简单工厂一般只包含一个具体的工厂类,由该工厂类生成所有产品类的对象。其内部一般是switch语句,根据输入参数的不同,创建不同的对象。

        ·工厂方法

        工厂方法是通过针对每一种产品提供一个工厂类。通过不同的工厂实例来创建不同的产品实例,在同一等级结构中,支持增加任意产品。这弥补了简单工厂的不足,而且满足了DIP原则。

        对于工厂方法,也有一个“抽象产品类”,但是他把简单工厂类中的抽象工厂类写成了一个接口,然后将每个产品写成一个工厂,用来实例化自身的产品。怎样如果要怎加产品的话,直接编写一个该产品的工厂就可以了。

        ·抽象工厂

        抽象工厂和工厂方法还是很相似的,它有过个抽象产品类,每个抽象产品类可以派生出多个具体的产品;一个抽象工厂类,可以派生多个具体的工厂类。每个具体工厂类可以创建多个具体产品类的实例。 

        它和工厂方法的区别在于:

        工厂方法只有一个抽象产品类,而抽象工厂有多个;

        工厂方法的具体工厂类只能创建一个具体产品类的实例,而抽象工厂可以创建多个。    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值