JavaOO设计模式概要(试用markdown)

来源:互联网 发布:张艺兴个人直播软件 编辑:程序博客网 时间:2024/06/09 17:00

Java 面向对象设计(OOAD)

OOAD

面向对象的分析与设计。

程序设计方法

软件工程学:是指导计算机软件开发和维护的一门工程学科。采用工程化的方法开发维护。

软件工程三要素

  1. 方法 :完成软件开发各项任务的技术方法(面向对象方法)
  2. 工具 : EA(为运用方法提供的自动或者半自动的软件工程支撑环境)
  3. 过程 : 基于原型的增量迭代软件开发过程(一系列任务的框架)

软件生命周期

(寻找商机,投标等等)
项目:有明确的需求的提出方
产品:没有明确的需求提出方,根据市场需求,自己提需求,自己设计

1.可行性分析阶段

技术可行性、资金可行性、人员可行性、…………
主要成果:可行性分析报告

2.需求分析阶段

确定待开发的系统是”做什么”
确定软件系统的功能需求和非功能需求。
主要成果:软件需求规格说明书(Software Requirements Specification,即SRS)

3.系统设计阶段。

主要成果:概要设计说明(分几层),详细设计说明(接口,bean的提取)、数据库 ,设计说明书。

4.系统实现阶段(也称编码阶段)

主要成果:通过单元测试的源代码

5.测试阶段。

通过各种测试方法和工具,使bug降到最低
主要成果:软件测试报告

6.维护阶段。

主要任务:通过各种必要的维护活动使系统持久的满足用户的需要。
维护活动4类:
1.改正性维护
2.适应性维护
3.完善性维护
4.预防性维护。
主要成果:软件问题报告,软件变动记录,软件维护记录。

—————————————————-

瀑布模型、喷泉模型、
———————————设计语言:UML—统一建模语言(图形化语言)

用在设计阶段,从各个角度来对项目进行描述。是被IBM统一了的
(流程图也包括在内,时序图,泳道图,类图(最多))

接口与类之间的关系是实现关系。
虚线三角形箭头
对象与对象的关系:
1.泛化(is a) —-实线三角形箭头
2.关联
1>聚合关系(has a) —共享关系 —- 可分离,即是没有这个不影响对象的整体
2>组合关系(contains a) —强聚合—-不可分离的,eg :汽车和方向盘
——–箭头的菱形是在拥有者的身上
3>依赖关系(use a)

面向对象的设计原则

标准

1.满足功能需求
2.满足了也不一定是好设计

好的设计

1.可读性(注释,代码,算法不要太复杂,尽量采用经典算法)
2.可复用性(抽取父类,接口,方法)
3.可扩展性(面对需求变化时,难易程度)
4.可维护性(错误的修改,遗漏的功能添加)

指标考量

内聚度

一个程序的某个单元负责的任务数量和多样性。
内聚与单个类和单个方法单元相关。
———-一个功能模块只做一个事情
—————内聚的原因就是为了重用。
———————高内聚(一个系统单元只负责一个事情)

耦合度

表示单元与单元之间的关联程度。
耦合度决定了变更一个应用程序的容易程度。

高内聚低耦合是所有优秀软件的共同特征。

设计原则:

1.开闭原则(是所有原则的核心原则)

需求改变的时候可以尽量不修改已有代码,而是扩展其功能

2.单一职责SRP。

一个类仅有一个引起他变化的原因,永远不要让一个类存在读个改变的理由。单一职责围绕的所处环境的职责(不是指代的某个具体的功能)。

3.里氏替换原则

就是判断两个类该不该做继承关系子类应该能够完全替换父类能够出现的地方,并且替换后,不会让父类调用的客户程序从行为上有任何改变
(不应该仅仅用生活知识(is a)来判断)

4.依赖倒转原则

是指两个模块如果有依赖关系,那么高层模块最好绑定依赖低层模块的抽象或者接口即是用调用的时候,用接口或者抽象类 来指向实现类。从而调用实现类里面的方法(要针对接口编程,不要针对实现类编程)

优点:是如果以后如果需要修改的时候,就只需要从新写一个实现类,传给接口指向,就不需要修改主代码。

5.组合/聚合复用原则。

即是少用继承。新对象需要使用到老对象的属性或者方法,应该采用其他的一些方法来进行处理。比如包含住作为一个属性,但是尽量不要用extends。

6.接口隔离原则

最小接口原则(不要用上层接口污染下层接口)

7.迪米特法则

最小知识原则。一个软件实体应当尽可能少与其他实体相互摩擦。
eg : import 导入的时候不要导入过多,导入操作的就可以了。

模式分类

1.架构模式(eg:三层架构)宏观概念

    表示层专用模式:MVC模式    ----------------M 模型  C 控制器  V视图    V ---界面  C--Listener      三层架构-(不是纯面向对象的)----贫血模型   业务层里面既有bean也有行为    ----复血模型

2.设计模式

    微观(对应某个具体的问题和场景)

模式包含的要素

1.模式名称2.该模式能解决的问题3.解决方案4.使用该模式后的效果(优缺点)

设计模式

根据设计模式是干什么的分类: 

1.创建模式

 涉及对象的创建*单列模式(即是只能创建一个对象的)--Singleton 模式 设计一个能且只能产生一个对象的类
1.单列模式预加载模式实现—懒汉模式。
  1>预加载实现,就算你不用,也会在内存产生放起。    ---------------优点:线程绝对安全的public class Singleton{private static Singleton sin = new Singleton();private Singleton(){}public static Singleton getInstance(){return sin;}}
2.单列模式二 —————–饿汉模式。

1>延迟加载实现。只有真正要使用的时候才产生
2>不加同步线程不安全,加了同步效率就低—————
缺点:这是线程不安全的。

 public class Singleton{    private static Singleton sin;    private Singleton(){            }    public static Singleton getInstance(){        if(sin == null){        sin = new Singleton();        }       return sin;    } }
3.单列模式三———-双锁模式

1>既支持延迟加载,又支持线程安全的高并发。

    public class Singleton{        private static Singleton sin;        private Singleton(){        }        public static Singleton getInstance(){            if(sin == null){            synchronized(Singleton.class){            if(sin == null){            sin = new Singleton();                    }                }            }            return sin;        }    }

*工厂模式

定义:集中创建实例对象
将客户类和工厂类(eg:DBUtil)分开。最常见的模式
由一个类专门来产生对象,其余类来使用对象。
解耦:对象的创建和使用分离

1.简单工厂模式一个工厂生产多个对象2.工厂方法模式多个工厂生产同一个对象3.抽象工厂产品和工厂都在变化,多个产品和多个工厂

建造者模式

*原型模式 Prototype

创建一个和已有的一模一样的新对象。
注意:重写的类必须实现Cloneable —也只是一个标志性接口

克隆的方法:对属性的实现是用的值传递
1.浅克隆
     重写Object类的clone方法:public Object clone() throws CloneNotSupportException{return super.clone();}
2.深克隆
克隆的所有类实现Cloneable 接口,Serializable接口。public 克隆对象类型 deepClone(){当前对象类型 newObject = null ;ObjectOutputStream oos = null;ObjectInputStream ois = null;ByteArrayOutputStream bos = null;try{bos = new ByteArrayOutputStream();oos  = new ObjectOutputStream(bos);oos.writeObject(this);ois  = new ObjectInputStream(new  ByteArrayInputStream(bos.toByteArray()));newObject =(克隆对象类型) ois.readObject();} finally{………………}return  newObject;}

2.结构模式 :涉及类与对象的组合

*Facade外观模式 eg:MVC

*适配器模式(Adaptor):

----即是 A B ,在C类中需要调用AB的方法。就是在C中包含住AB

*装饰器模式Decorator:

eg:IO 管道对接用的就是装饰器模式。用的地方:东西有主次之分,   而且需要用次要的东西来修饰主的

代理模式(Proxy):

可以实现面向切面编程。也称面向方向编程。

桥梁模式(Bridge):

一个类型有两个或者多个维度的变化。没有主次之分

3.行为模式:对于类和对象职责方法的设计

观察者模式

*命令模式

模版模式

0 0
原创粉丝点击