java设计模式原则
2016-03-05 12:58
447 查看
GOF:四人组(Gang of Four)
《 Design Patterns》一书讨论了 23 种不同的范式,并依据三个标准分类(所有标准都涉及那些可能发生变
化的方面)。这三个标准是:
(1) 创建:对象的创建方式。这通常涉及对象创建细节的隔离,这样便不必依赖具体类型的对象,所以在新
添一种对象类型时也不必改动代码。
(2) 结构:设计对象,满足特定的项目限制。这涉及对象与其他对象的连接方式,以保证系统内的改变不会
影响到这些连接。
(3) 行为:对程序中特定类型的行动进行操纵的对象。这要求我们将希望采取的操作封装起来,比如解释一
种语言、实现一个请求、在一个序列中遍历(就象在继承器中那样)或者实现一种算法。
设计模式原则;
1.单一职责原则 :(就一个类而言,应该仅有一个引起它变化的原因)
2.开放-封闭原则(OCP):(软件实体(类,模块,函数等等)应该
可以扩展,但是不可修改)。对于扩展是开放的,对于更改是封闭的
拒绝不成熟的抽像和抽象本身一样重要
3.依赖倒转原则:抽象不应该依赖于细节,细节应该依赖于抽象(针对
接口编程,不要针对实现编程)
4.里氏代换原则:一个软件实体如果使用是一个父类的话,那么一定适用于
其子类,而且它察觉不出父类对象和子类对象的区别,也就是说,在软件里
把父类替换成它的子类,程序的行为没有变化.(子类型必须能够替换掉他们的
父类型)
5.迪米特法则:如果两个类不必彼此直接通信,那么这两个类就不应当发生
直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话
,可以通过第三者转发这个调用(在类的结构设计上,每一个类都应当尽量
降低成员的访问权限)
6.接口隔离原则:
工厂模式;
简单工厂模式:用一个单独的类创造实例的过程(体现了,封装,多态,继承的思想)
类不是越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象
的抽象集合才是类
策略模式:
策略模式是一种定义一系列算法的方法,从概念上看,所有这些算法完成的都是相同的
工作,只是实现不同(策略模式就是用来封装算法的)
单例模式:
饿汉式单例:静态初始化的方式是在自己被加载时就将自己实例化(提前占用系统资源)。
懒汉式单例:在第一次被引用时,才将自己实例化(面临多线程访问的安全性问题,需要做双重锁定)
《 Design Patterns》一书讨论了 23 种不同的范式,并依据三个标准分类(所有标准都涉及那些可能发生变
化的方面)。这三个标准是:
(1) 创建:对象的创建方式。这通常涉及对象创建细节的隔离,这样便不必依赖具体类型的对象,所以在新
添一种对象类型时也不必改动代码。
(2) 结构:设计对象,满足特定的项目限制。这涉及对象与其他对象的连接方式,以保证系统内的改变不会
影响到这些连接。
(3) 行为:对程序中特定类型的行动进行操纵的对象。这要求我们将希望采取的操作封装起来,比如解释一
种语言、实现一个请求、在一个序列中遍历(就象在继承器中那样)或者实现一种算法。
设计模式原则;
1.单一职责原则 :(就一个类而言,应该仅有一个引起它变化的原因)
2.开放-封闭原则(OCP):(软件实体(类,模块,函数等等)应该
可以扩展,但是不可修改)。对于扩展是开放的,对于更改是封闭的
拒绝不成熟的抽像和抽象本身一样重要
3.依赖倒转原则:抽象不应该依赖于细节,细节应该依赖于抽象(针对
接口编程,不要针对实现编程)
4.里氏代换原则:一个软件实体如果使用是一个父类的话,那么一定适用于
其子类,而且它察觉不出父类对象和子类对象的区别,也就是说,在软件里
把父类替换成它的子类,程序的行为没有变化.(子类型必须能够替换掉他们的
父类型)
5.迪米特法则:如果两个类不必彼此直接通信,那么这两个类就不应当发生
直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话
,可以通过第三者转发这个调用(在类的结构设计上,每一个类都应当尽量
降低成员的访问权限)
6.接口隔离原则:
工厂模式;
简单工厂模式:用一个单独的类创造实例的过程(体现了,封装,多态,继承的思想)
类不是越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象
的抽象集合才是类
策略模式:
策略模式是一种定义一系列算法的方法,从概念上看,所有这些算法完成的都是相同的
工作,只是实现不同(策略模式就是用来封装算法的)
单例模式:
饿汉式单例:静态初始化的方式是在自己被加载时就将自己实例化(提前占用系统资源)。
懒汉式单例:在第一次被引用时,才将自己实例化(面临多线程访问的安全性问题,需要做双重锁定)
相关文章推荐
- 自学 java 笔记 day8(继承下)
- java线程
- eclipse 导入XUtils 的 demo
- java基础知识介绍
- Struts2中的OGNL详解 《转》
- java io
- com.springframework.web.client.RestTemplate
- struts2基础
- Java内部类分类
- java基础-001
- javascrip cookie
- eclipse运行web project经验
- LeetCode : Longest Palindromic Substring [java]
- java类反射
- spring
- jdk API标记接口
- java中文件和流处理
- JAVA数据类型讲解
- java静态方法与非静态方法有什么区别?
- jdk和jre的区别