Java 常用设计模式 浅析

[color=green]
设计模式篇

大多数书籍谈到设计模式,理论偏多,实践偏少,或者杂七陈八表述不清,或者
夹杂冗余,导致读者混乱。本文力争精简,快速掌握。采用编程语言-Java。

1 设计模式之-- 简单工厂模式
简介:根据传入不同的参数,工厂类或工厂方法就实例化出合适的对象(但不关心具体的实例化过程),返回结果。
生活实例:活字印刷术(根据文字的不同,采用不同的文字得到不同的刻板,但不关心过程) 计算器(根据不同的运算符调用不同的计算方法,但不关心计算过程)

2 设计模式之-- 策略模式
简介:定义一组算法操作并分别封装,所有的算法完成的都是相同的工作,只是实现的方式不同,算法之间可以互相替换,用到谁时调用谁()。
生活实例:我去买包子,不但关心买包子这一个动作,我还要具体到包子的选材,和面,切料,包包子,蒸包子这一系列的算法里面

注:此时会感觉工厂模式和策略模式差不多,实际上还是有区别的,可以把简单工厂模式理解为黑盒,把策略模式理解为白盒,
买包子这一动作,工厂模式来说,并不关心制作包子的过程,只关心拿到包子这一结果。而策略模式不但关心买包子,而且还关心包子一系列的制作过程。

3 设置模式之--单一职责模式
简介:这个不做过多说明,即开发业务复杂时,尽可能让模块专心完成某一项功能。

4 设计模式之--开放-封闭模式
简介:软件实体(类 模块 函数等)可以扩展但不可以修改
生活实例:员工上班迟到这一事例中,员工上班并且保证8小时工作是不允许修改的,但是因为员工家庭情况的特殊性,可以扩展每个员工的上下班时间,、
早到早下班,晚到晚下班,销售人员则可以扩展为不限定上下班时间,完成额度即可。

5 设计模式之--依赖倒转原则
简介:高层模块不应依赖低层模块,抽象不应依赖细节,所有都应依赖抽象。
生活实例:电脑主板 cpu 音响,内存等是不允许互相依赖的,他们只针对抽象依赖。比如内存条坏了,只需要换一根内存就可以了,无需整块主板都换掉。
但是 主板依赖主板的抽象,内存依赖内存的抽象,cpu也依赖cpu的抽象。

6 设计模式之--代理模式
简介:让真正的实体和代理实体实现同一接口,完成工作。
应用场景:代理模式分为远程代理、虚拟代理、安全代理、智能指引四种
远程代理:为一个对象在不同的地址控件提供局部代表。这样可以隐藏一个对象
存在于不同地址空间的事实。
虚拟代理:根据需要创建开销很大的对象。通过他来存放实例化需要很长时间的真实对象。
安全代理:用来控制真是对象访问时的权限。
智能指引:是指调用真实的对象时代理处理另外一些事。

7 设计模式之--装饰器模式
简介: 为已有功能动态的添加更多功能的一种方式。
应用场景:需要在主类中新加入一些只有在某种特定场合下才会被执行的特殊行为的操作。装饰器把
每个要装饰的功能放在单独的类中,并让这个类包装他所需要装饰的对象,因此当需要执行
特殊行为时,客户代码就可以在运行时根据需要有选择的按顺序的使用装饰功能包装对象。
生活实例:穿衣服。人为主类,衣服为含有人的对象的类,把具体的穿某种衣服的动作包装到单独的类中。在需要的时候,实例化并执行即可。

8 设计模式之--工厂方法模式
简介:定义一个工厂接口,再让每一个具体工厂实现该工厂接口
应用场景:

工厂方法模式和简单工厂模式的对比:简单工厂将选择实例化哪个对象的判断放在工厂类中,
让客户端去除了与具体产品的依赖。工厂方法模式将这一判断放在了客户端。
简单工厂模式 违背了 开放-封闭原则(把选择判断放在工厂类,失去了扩展),而工厂方法模式克服了这一缺点。

9 设计模式之--原型模式
简介:主类的克隆 复制。
应用场景:打印 就是以原型为基准,不断复制产生新的对象。但是此处涉及到复制对象的区别:
深复制与浅复制。
浅复制:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用
都仍然指向原来的对象。
深复制:深复制则是把引用对象的变量指向父之过的新对象。

说明图 复制前 :A
复制后 : 浅复制 复制后 a 仍指向A
深复制 复制后 b 不指向A 指向自身。
实现深复制的方式多种多样,这里提供一种:
// workObject 为被复制对象(即 Resume 属性)
public Resume(String name){
this.name = name;
workObject = new WorkObject();
}
public Resume(WorkObject workObject){
this.workObject = (WorkObject)workObject.clone();
}
生活实例:打印

10 设计模式之--模板方法模式
简介:重复的代码都应该上升到父类,而不是让每个子类都去重复。
应用场景:子类在完成主类的行为时,在某一细节层次一致的一个过程或一系列步骤,但个别步骤在更
详细的层次上的实现可能不同时,考虑使用模板方法来处理。

11 设计模式之--迪米特法则
简介:如果两个类之间不需要直接通信,那么这两个类就不应该发生直接的相互作用。如果其中一个雷需要调用另一个类的
某个方法的话,可以通过第三者转发这个调用。
应用场景:公司其他部门不需要知道IT部门的具体员工是谁,在电脑出现故障之后,不需要依靠
个人关系去找IT部门的某个同事修理,而是直接找IT部门主管即可。所以在IT部门同事
集体辞职的情况下,仍然可以修理电脑。

12 设计模式之--外观模式
简介:为子系统的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
应用场景:系统设计经典 三层架构,层与层之间可以建立外观模式,
这样可以为复杂的子系统提供一个简单的接口,使得耦合大大降低。减少模块之间的依赖时也可使用外观模式。
维护老旧系统时,可以开发一个外观类,来提供设计粗糙或高度复杂的遗留代码的比较清晰的简单接口,
让新系统与外观类对象交互。


13 设计模式之--建造者模式
简介:建造者模式 又叫生成器模式。建造者模式将对象的构建(内部的构建通常是稳定的)与表示分离,通过第三者指挥类生成最终具体类。
应用场景:将一些稳定而复杂的内部构建过程封装成接口Builder,具体建造者ConcreteBuilder实现Builder,构造
和装配各个部件,指挥者Directer 指挥建造过程。

14 设计模式之--观察者模式
简介:多个观察者同时监听一个主题,当这个主题状态发生变化时,会通知所有观察者对象,使他们自己更新自己。
应用场景:1 当一个对象的改变需要同时改变其他对象,而且该对象不知道有多少对象需要改变。2 当抽象模型一方面依赖于另一方面时,使用观察者模式
独立封装这两方面,实现解耦。

15 设计模式之--抽象工厂模式
简介:抽象工厂模式是在简单工厂模式基础之上再抽象一层,简单工厂是允许子类去决定实例化哪个实例,抽象工厂是把工厂类也抽象化,
让子类决定实现哪个工厂并且实例化哪个实例。
应用场景:设计一套系统,实现CURD,但是必须支持多种数据库。系统分为MVC结构,视图层不关心和哪种数据库交互,控制器决定实例化哪种数据库的
对象。数据库对象实现数据库操作类的接口(此处可以理解为抽象工厂),实现解耦。换用不同的数据库时,只需要数据库对象去实现不同数据库操作类
的接口即可。

(抽象工厂的缺陷:)

16 设计模式之--状态模式
简介:其 核心思想是 当控制一个对象状态转换的条件表达式国语复杂时,把状态的判断逻辑转移到表示不同扎un国泰的一系列类当中
可以把复杂的判断逻辑简化。
应用场景:举个例子,当判断分支过多或者过于复杂时,可以把判断结构的每一个分支写成一个个的类,在各个类的内部做简单判断。

17 设计模式之--适配器模式
简介:适配器模式分为类和对象适配器,主要功能是将两个不适宜直接在一起工作的类或对象通过中间类或对象实现在一起工作的可能。
可以简单将其理解为 翻译者。 两个类完成相同或相似的工作,但是接口不同时,适合使用适配器。
应用场景:笔记本电脑电源适配器。
注:设计模式并非为了使用而存在,而是为了是代码更具有灵活性和扩展性,更具有艺术美而产生。所以在编码之前,全体队友如果积极约定,、
善于沟通,很可能并不需要本话题中的适配器模式。 在代码设计之处,遵循"约定优于配置"这一思想,良好沟通,集思广益,达到运用模式于无形,
这才是设计模式的真正境界。


[/color]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

annan211

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值