1.为何要使用设计模式
-1.复用解决方案:设计模式的主要思想就是:复用,通过复用已经确认的设计,能够在解决问题的过程中使用最小的成本来获得最大的效益,而且可以在学习他人的过程中,不用在为那些总是重复的问题重复设计解决方案
-2.设计模式将设计方法标准化
开发团队中的交流和协作通常都要使用共同的词汇和要对问题达成共识,设计模式在项目在分析和设计阶段提供了共同的基准点
-3.设计模式可以提供个人和团队的设计能力
-4.设计模式使软件更容易修改和维护
设计模式能够使软件更容易修改和维护的原因在于:这些模式都是久经考验的解决方案。
设计模式是一种 多赢 的设计方案
如果说学习某种具体的编程语言是练习程序设计的 招式 的话,那么学习设计模式无疑就是练习程序设计的 内功 ,而 内功 通常才是一个高手致胜的关键
=================================================================================================
设计模式的分类:
经典的GOF的23中设计模式分为三类:
创建型模式:用于创建对象;对象的创建会消耗掉系统的很多资源,所有单独对对象的创建进行研究,以便能够高效地创建对象就是创建型模式要探讨的问题
结构性模式:用于构建类间的关系。如何设计对象的结构,继承和依赖关系会影响到后续程序的维护性,代码的健壮性,耦合性,等,这些因素需要使用结构性模式来优化
行为型模式:用于控制对象的行为,如果对象的行为设计得好,那么对象的行为就会更清晰,他们之间的协作效率就会更高。
设计模式的分类:
创建型设计模式:5
工厂方法模式
抽象工厂模式
建造者模式
原型模式
单例模式
结构型设计模式:7
适配器模式
桥接模式
代理模式
外观模式
装饰模式
组合模式
亨元模式
行为型设计模式:11
命令模式
观察着模式
责任链模式
迭代器模式
访问者模式
状态模式
备忘录模式
策略模式
调停者模式
模板方法模式
解释器模式
==============================================================
当前最流行的软件设计方式就是面向对象的设计方式,在程序的开发中,使用面向对象的设计方法会给大规模的软件开发带来清新的活力,提高编程的效率,的那是如果对面向对象的设计方法掌握不好也会带来很多的麻烦,
本次就是介绍 设计模式需要遵守的 原则
===软件维护
维护通常分为以下几类:
功能扩充
功能修改
功能删除
设计不当会带来以下问题:
--1.僵化性:设计难以修改
--2.脆弱性:设计易于遭到破坏,
--3.牢固性:设计难以复用,无法重用的软件模块将导致大量不必要的劳动
--4,。不必要的复杂性:过分设计导致设计复杂,影响开发效率和性能
--5.不必要的重复性:过多的重复违反了不要重复自己的DRYD的原则
--6.晦涩性:混乱的表达导致程序不可读
======面向对象的设计原则:
主要有以下原则:
单一职责原则:
开闭原则
里氏替换原则
依赖倒置原则
接口隔离原则
=======1
基础原则:
开闭原则 OCP
开闭的原则的含义是:一个软件实体应当对扩展开发,对修改关闭
=======2
单一职责原则 SRP
单一职责原则的含义是:就一个类而言,应该仅有一个引起它变化的原因
=======3
里氏替换原则 LSP
里氏替换原则的含义是:若对每个类S的对像01,都存在一个类T的对象02,使得在所有针对T编写的程序P中,用01替换02后,程序P行为功能不变,则S是T的子类。
该原则具体体现在继承关系上,在实现继承时,子类必须能替换掉他们的基类
如果一个软件代码中使用的是基类的话那么也一定可以使用其子类,但反过来,的代换则可以不成立
public class Rectangle {
//违反里氏替换原则的继承
private int width;
private int height;
public int getWidth() {
return width;
}
public void setWidth(int width) {
this.width = width;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
class Square extends Rectangle{
public int getHeight(){
return getWidth();
}
public void setheight(int height){
this.setheight(height);
}
}
public class Rectangle {
//符合里氏替换原则的继承
private int width;
private int height;
public int getWidth() {
return width;
}
public void setWidth(int width) {
this.width = width;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
class SquareMode{
private int length;
public int getLength(){
return length;
}
public void setLength(int length){
this.length=length;
}
}
=======4
依赖倒置原则 DIP
依赖倒置原则的含义是:高层模块不应该依赖低层模块,两者都应该依赖于抽象,抽象不应该依赖于细节,细节应该依赖于抽象
在模块编程中要依赖抽象编程,不要依赖于具体的细节编程,即针对接口的编程,不要针对于具体的实现编程。
public class ewwe {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//不符合依赖倒置的原则的实例
ArrayList<String> lista=new ArrayList<String>();
lista.add("元素1");
lista.add("元素2");
lista.add("元素3");
//符合依赖倒置原则的实例
List<String> listb=new ArrayList<String>();
lista.add("元素1");
lista.add("元素2");
lista.add("元素3");
}
}
=======5
接口隔离原则 ISP
接口隔离原则的意图是:不要强迫客户依赖于他们不需要的方法,应用接口将两者隔离。
//生产接口
public interface IProduce {
public void produce();
}
//消费接口
public interface IConsume {
public void consume();
}
public class ewwe implements IProduce,IConsume {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
IConsume consume=new ewwe();
consume.consume();
IProduce iProduce=new ewwe();
iProduce.produce();
}
@Override
public void consume() {
// TODO Auto-generated method stub
System.out.println("消费者消费");
}
@Override
public void produce() {
// TODO Auto-generated method stub
System.out.println("生产者生产");
}
}
=========================================================================
统一建模语言UML的描述
统一建模语言(UML Unified Modeling Language)是一个通用的可视化建模语言,用于对软件进行描述,可视化处理,构造和建立软件系统制品的文档,他是非专利的第三代建模和规约语言
UML中的关系:
uml定义的关系主要有六种:
依赖,继承,关联,实现,聚合,组合
这些关系的理解和使用是掌握和应用uml的基础和关键,
UML关系的说明和类图的描述
----1、
依赖关系
-----2,
继承关系
------3;
实现关系
-------4;
关联关系
这中关系体现的是两个类,或者类与接口知己语义级别的一种强依赖关系
--------5
聚合关系
聚合是关联关系一种特例,他主要体现在语义是整体与部分的拥有关系,即拥有一个的关系(has a),此时整体与部分之前是可用分割的,他们各有自己的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享
---------6
组合关系
组合关系是关联关系中的一种特例,它体现的是一种包含一个关系,这种关系比聚合更强,也称为强聚合,他同样体现整体与部分间的关系,但 此时整体与部分是不可分的,
整体的生命周期结束也就意味着部分生命周期的结束
====================
几种关系的强弱比较:从强到弱
组合---》聚合--》关联--》依赖
============
UML中的图形类型
UML中定义的图形类型有三大类:
----------1
结构性图形(Structure Diagrams):强调的是系统式的建模,包括:
类别图:Class Diagrams
元件图:Component Diagrams
复合结构图:Composite Structure Diagrams
部署图:Deployment Diagrams
对象图:Object Diagrams
套件图:Package Diagrams
-----------------2
行为式图形(Behavior Diagrams),强调系统模型中触发的事件,包括
活动图:Activity Diagrams
状态机图:State Machine Diagrams
用例图:Use Case Diagrams
-----------------3
沟通性图形(Interaction Diagrams),属于行为图形的子集合,强调系统模型中的资料流程,包括:
通信图:Communication Diagrams
交互概述图:Interaction Diagrams
顺序图:Sequence Diagrams
时间图:UML Timing Diagram
========================================
UML工具软件
常用的UML工具软件有很多:
大致推荐几种:
ArgoUML
Astah
Enterprise
StarUML