架构师学习之路1设计模式

想学习基础在数据结构和设计模式之间犹豫了很久,最后还是决定先看一下常用的设计模式 参考书:Design Pattern-Head First 中文版

原则

封装变化

多用组合,少用继承

针对接口编程,不针对实现编程

为交互对象之间的松耦合设计努力

对扩展开放,对修改关闭

要依赖抽象,不要依赖具体类

最少知识原则,只和你的密友谈话

由超类控制一切

策略模式:

定义了算法簇,分别封装起来,让他们可以相互替换,此模式让算法的变化独立于使用算法的客户

多用组合少用继承,组合既是实现接口

具体做法:声明多个行为接口,用不同的行为实现各个接口。把接口声明组合到一个类中,用令一个类继承该类,用不同的行为实例化父类的声明

抽象类和接口的区别 参考:http://blog.csdn.net/fenglibing/article/details/2745123

1.接口是对动作的抽象,抽象类是对根源的抽象

2.接口是抽象类的变体,接口中所有的方法都是抽象的。抽象类的方法是抽象的,抽象类是声明方法的存在而不是去实现。

3.接口可以多继承,抽象类不能

4.接口定义的方法,自己不能实现。抽象类可以实现部分方法

5.接口中的基本数据类型为static,抽象类不是

观察者模式:

定义了对象之间的一对多的依赖,这样一来,当一个对象改变状态时,他的所有依赖者都会收到通知并自动更新。

松耦合

具体做法:定义一个观察者接口,定义一个主题接口,主题中定义注册方法 注销方法,通知方法。观察者中定义可被主题调用的方法

装饰者模式:

        动态的将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的代替方案

开闭原则 类应该对扩展开放,对修改关闭

1.装饰者和被装饰对象有相同的超类

2.可以用一个或多个装饰者包装一个对象

3.装饰者和被装饰对象有相同的超类型,所以在任何需要原始对象的场合,可以用装饰过的对象代替它

4.装饰者可以在所委托被装饰者的行为的前后加上自己的行为,以达到特定的目的 

5.对象可以在任何时候被装饰,所以可以在运行时动态的不限量的用装饰者装饰对象

工厂模式:

定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂模式让类把实例化推迟到子类

java创建对象的几种方式

1.使用new语句创建对象

2.运用反射手段,调用java.lang.Cass或者java.lang.reflect.Constructor类的newInstance()实例方法

Class c = Class.forName(“A”);factory = (AInterface)c.newInstance();

3.调用对象的clone()方法

4.运用发序列化手段,调用java.io.ObjectInputStream对象的readObject()方法

抽象工厂模式:

提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

其实就是可以调用不同的实例化工厂类

 依赖导致原则

1.变量不可持有具体类的引用

2.不要让类派生自具体类

3.不要覆盖基类中已经实现的方法

工厂模式和抽象工厂模式可以将对象的创建封装起来,以便于得到更松耦合,更有弹性的设计

单例模式:

确保一个类只有一个实例,并提供一个全局访问点

静态变量,静态方法实现

命令模式:

将请求封装成“对象”,以便使用不同的请求,队列或者日志来参数化其他对象。命令模式支持可撤销的操作


把命令执行的对象具体操作方法封装到一个对象中,对外只提供一个执行和撤销接口,使用时把这个封装的对象当作参数传送,执行该参数的“执行”方法就能实现。

当需要将发出请求的对象和执行请求的对象解耦时候,使用命令模式

适配器模式:

将一个类的接口,转换成客户期望的另一个接口哦。适配器让原本接口不兼容的类可以合作无间。

其实就是一个中间件,插座的交换口

外观模式:

提供一个统一的接口,来访问子系统中的一群接口。外观定义一个高层接口,让子系统更容易使用。

最少知识原则:调用发放原则

1.该对象本身

2.被当作方法的参数而传递的对象

3.此方法创建或实例化的任何对象

4.对象的任何组件

适配器的意图是要转换接口

外观模式的意图是统一和简化接口

模版方法模式:

在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模版方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤

迭代器模式:

提供一个方法顺序访问一个聚合对象中的各个元素,而不暴露内部的表示

组合模式:

允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合让客户以一致的方式处理个别对象以及组合对象

声明一个接口,组合对象,个别对象都实现这个接口,提供统一的操作

状态模式:

允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类

所有的状态继承相同的“抽象类”

如果需要在一个类中管理状态,状态模式提供了封装状态的技巧

代理模式:

为另一个对象提供替身或者占位符以控制对这个对象的访问




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值