目录
设计模式是什么?
设计模式是指在软件开发中,经过验证的,用于解决在特定环境下、重复出现的、特定问题的解决方案。
举个例子:
假设一个人感冒了,到药店买感冒药,这个感冒药就是设计模式的一个提现。
经过验证的:药品上市前,大量的验证实验
特定情况下:药品只针对人,不针对动物
重复出现的:正因为感冒会重复出现,研制药品才有意义
如何学习?
第一步:准确理解每个设计模式的功能、基本结构、标准实现,了解适合使用它的场以及使用效果
第二步:实际的开发中,尝试使用这些设计模式,并反复思考和总结是否使用得当,是否需要做一些变化
第三步:再回头去看设计模式的理论,有了实际的模式应用经验再看设计模式,会有不同的感悟。
第四步:多次重复学习设计模式的第二步和第三步
我们开始吧
=========================================================================
简单工厂
场景
Java:需要面向接口编程,如何使用接口来做到真正的面向接口?
接口和抽象类的选择:1.优先选用接口。2.在既要定义子类的行为,又要为子类提供公共的功能时应选择抽象类。
代码描述
首先定义一个接口
再定义实现类
我们常规使用时的方式
常规使用就是new 一个实现类,但是接口的思想是封装隔离,此时这种方式使用时用户不仅知道了接口名(Api)还知道了具体实现(Impl)。
因此我们要做的就是在编程中,只提供接口,隐藏实现。
解决方案
简单工厂定义:
解决思路:虽然不让模块外部知道具体实现,但是模块内部是可以知道实现类的,而且创建接口是需要具体实现的。那么直接在模块内部新建一个类,在这个类里面创建接口,然后把创建好的接口返回给客户端。这样外部通过类来获取相应的接口对象,就可以操作接口定义的方法了。
示例代码:
新建一个简单工厂的对象Factory
客户端使用:
理解Factory所处的位置:他是在模块内部的,跟Api和实现是在一起的。也就是说对用户可见的只有Api和Factory,所以就不仅仅是new Impl()这么简单的,是有了质的变化。
简单工厂创建对象的范围
简单工厂的调用顺序示意图
简单工厂优缺点
简单工厂思考
本质:选择实现,重点在于选择,实现是已经实现好了
难点:如何选择实现?传递参数?读取内存?读取数据库?