内部技术培训之简单工厂模式、工厂方法模式

来源:互联网 发布:剑网3军爷捏脸数据 编辑:程序博客网 时间:2024/04/28 17:09

从3月9号开始,我们app组开始组织技术培训课程,旨在提高整个小组的开发技能。小组每个人每周研究一项技术,然后讲解给其他成员。我相信有句话说得对,只有能讲出来让别人能理解的东西才真正属于自己的,希望我们每个人都能获得属于自己的技能。





先举一个例子。我们完成工作任务就相当于拿着刀去砍柴。

砍柴快不快,往往取决于几个因素:

1、我们的体力是否足够好;我们的柴是虚拟的,这个因素可以不考虑,只要保持健康就好。

2、我们是否足够勤奋;这个取决自身因素,完全可以自己控制,我想我们都是勤奋的。

3、我们的刀是否足够锋利;我们可以下功夫的就只有一个因素,磨刀。

在开发中,学习就相当于在磨刀,能起到事半功倍的效果;刀不快,切好相反,事倍功半,甚至不及半。有些开发人员成天加班,却啥也没做出来,就是这个原因。

磨刀不误砍柴工。

------------------------------

软件开发人员分为两种:programmercoder。后者成为编码者,主要负责按照业务逻辑编写代码,目前我们所处于的状态;前者成为程序员,也称为程序设计者,重点在于设计。

每一位技术大神必然不是每天忙于编码的,他必须是擅长解决问题,并从技术架构上去避免出现的问题,比如对异常和日志的封装,统一由专门的组件来处理。

不言而喻,他做的工作就是在设计。而设计模式就是大神熟练使用的工具。




接口,英文称作interface,在软件工程中,接口泛指供别人调用的方法或者函数。从这里,我们可以体会到Java语言设计者的初衷,它是对行为的抽象。

1、大家都知道,Java中接口里定义的成员变量都自动是finalstatic的,为什么?这样有什么好处?为什么不能定义变量?这里为大家简单说说。

接口就是提供一种统一的”协议”,而接口中的属性也属于“协议”中的成员。它们是公共的,静态的,最终的常量。相当于全局常量。抽象类是不“完全”的类,相当于是接口和具体类的一个中间层。即满足接口的抽象,也满足具体的实现。

如果接口可以定义变量,但是接口中的方法又都是抽象的,在接口中无法通过行为来修改属性。有的人会说了,没有关系,可以通过实现接口的对象的行为来修改接口中的属性。这当然没有问题,但是考虑这样的情况。如果接口A中有一个public访问权限的静态变量a。按照Java的语义,我们可以不通过实现接口的对象来访问变量a,通过A.a =xxx;就可以改变接口中的变量a的值了。正如抽象类中是可以这样做的,那么实现接口A的所有对象也都会自动拥有这一改变后的a的值了,也就是说一个地方改变了a,所有这些对象中a的值也都跟着变了。这和抽象类有什么区别呢,怎么体现接口更高的抽象级别呢,怎么体现接口提供的统一的协议呢,那还要接口这种抽象来做什么呢?所以接口中不能出现变量,如果有变量,就和接口提供的统一的抽象这种思想是抵触的。所以接口中的属性必然是常量,只能读不能改,这样才能为实现接口的对象提供一个统一的属性。

通俗的讲,你认为是要变化的东西,就放在你自己的实现中,不能放在接口中去,接口只是对一类事物的属性和行为更高层次的抽象。对修改关闭,对扩展(不同的实现implements)开放,接口是对开闭原则的一种体现。

2、接口与抽象类的区别

抽象类:是对一组具有相同属性和方法,在逻辑上有关系的抽象。is a

接   口:对一组具有相同的属性和方法的在逻辑上不相关的抽象。like a






举例说明设计模式:

建筑工地上,工人在盖房子,但是你却看不到制造砖的人。在汽车厂房里,你看到的是组装汽车的人,而不是制造零件的人。或者你去买的汽车以一个完整的整体,不是买一大堆零件。

软件开发中,分为项目经理、UI、程序架构师、程序编码、测试工程师等,各施其职。


1、开闭原则

OCPOpenforExtension,Closed forModification)

核心思想:一个对象对扩展开发,对修改关闭。

2、单一职责原则:低耦合,高内聚

3、里氏替换原则:在父类出现的地方,都可以用子类替换。

4、依赖注入原则:接口变成。

5、接口分离原则:接口中不应提供过多的行为。

6、迪米特原则:一个对象尽可能对其他对象少了解,低耦合。比如订单中的订单项。

简单工厂模式

该模式中包含的角色及其职责

工厂(Creator)角色

简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。

抽象产品(Product)角色

简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。

具体产品(Concrete Product)角色

是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。

工厂方法模式

定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。




比较简单工厂模式和工厂方法模式

工厂方法模式是为了克服简单工厂模式的缺点(主要是满足OCP原则)设计的。

结构复杂度

代码复杂度

客户端编程难度

管理上的难度








0 0
原创粉丝点击