java知识小结之常见设计模式

设计模式六大原则:单一职责原则,里氏替换原则,依赖倒置原则(面向抽象编程),接口隔离原则(依赖接口最小化),迪米特法则(降低类之间的耦合),开闭原则(扩展开放,修改关闭)
1.工厂模式之简单工厂
目的:为创建对象提供接口,将对象的具体创建过程进行屏蔽
角色:工厂类、抽象产品、具体产品
实现方式:需要具体产品时,将该产品对应的标识(通常为字符串)作为参数调用工厂类的静态生产方法生成(new)指定对象。
优缺点:每当有新类型的对象需要加入时,工厂方法内部需要加入逻辑判断,违背开闭原则。
2.工厂模式之工厂方法
目的:同上
角色:抽象工厂、具体工厂、抽象产品、具体产品
实现方式:具体工厂生产具体产品对象,需要新的具体产品只需创建一个新的具体工厂
优缺点:产品种类非常多时,将出现大量与之对应的具体工厂
3.单例模式
目的:控制特定类只产生一个对象
实现方式:构造方法私有化,提供一个自身对象及获取该对象的静态方法
优缺点:除非系统有协调机制,一般情况下不要使用存在状态的单例模式
4.原型模式
目的:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象
角色:客户、抽象原型、具体原型
实现方式:new一个原型角色,使用原型进行克隆(clone)
优缺点:clone方法在java实现中有着一定的弊端和风险
5.桥梁模式
目的:将抽象部分与他的实现部分分离,使两者可以独立变化,其中实现部分是被抽象部分调用而非继承
角色:抽象角色、精确抽象角色、实现角色、具体实现角色
实现方式:抽象角色调用实现角色的方法进行组合来实现某一功能,精确抽象角色调用抽象角色的方法进行组合,具体实现角色实现实现角色声明的方法
使用环境:当系统中有多处要使用类似行为或多个类似行为的组合时
优缺点:使用低耦合性的组合代替继承
6.代理模式
目的:为其他对象提供一种代理以控制对这个对象的访问
角色:抽象主题角色、代理主题角色、真实主题角色
实现方法:抽象主题角色调用代理主题角色来使用真实主题角色的方法,代理主题角色提供对真实主题角色访问前的一些控制和管理
优缺点:通过协调调用者和被调用者来降低系统耦合度
7.组合模式
目的:使客户端对单个对象和组合对象的使用具有一致性
角色:抽象构件角色、树叶构件角色、树枝构件角色
实现方式:树叶构件角色和树枝构件角色都实现了抽象构件角色的方法,树枝构件角色包含多个抽象构件角色对象
优缺点:更容易在组合体内加入对象部件,但不容易限制组合中的构件
8.装饰模式
目的:动态地给一个对象添加一些额外的职责
角色:抽象构件角色、具体构件角色、装饰角色、具体装饰角色
实现方式:具体构件角色和装饰角色都实现了抽象构件角色接口,装饰角色内部有一个或多个抽象构建角色的实例,具体装饰角色继承于装饰角色
应用环境:在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责;当不能采用生成子类的方法进行扩充时,
优缺点:系统设计时具体装饰角色可能会产生很多
9.观察者模式
目的:当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被更新
角色:抽象目标角色、抽象观察者角色、具体目标角色、具体观察者角色
实现方式:抽象目标角色拥有多个抽象观察者角色的实例引用集合,抽象观察者角色声明update()方法,当状态发生改变时,遍历调用集合中观察者的update()
应用环境:当一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变
10.策略模式
目的:将不同的业务处理方法封装成拥有共同接口的类,并且使它们之间可以互换
角色:算法使用环境、抽象策略角色、具体策略角色
应用环境:系统能够在几种算法(业务逻辑)中快速切换;一些类仅仅行为不同



参考文献:深入浅出设计模式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值