Java的23种设计模式(疯狂Java总结)(6)

2019-08-31 18:02

Java设计模式(疯狂Java联盟版)

List ems = pm.getEm*loyers(); for (Employer em : ems) {

System.out.println(em.getNam*()); } * }

result

项目助理 程序员二

1.2.4 装饰模式

动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模*相比生成子类更为*活。

适用性

1.在不影响其他*象的情况下,以动态、透明的方式给单个对象添加职责。

2.处理那些可以撤消的职责。

3.当不能采用生成子类的方法进行扩充时。

参与者

1.Component

定义一个对象接口,可以给这些对象动态地添加职责。

2.ConcreteComponent

定义一个对象,可以给这个对象添加一些职责。

3.Decorator

维持一个指向Component对象的指针,并定义一个与Component接口一致的接口。

4.ConcreteDecorator 向组件添加职责。

类图

25

Java设计模式(疯狂Java联盟版)

例子 Component

public interface Person {

void eat(); }

ConcreteComponent

*ublic class M*n implements Person { public void eat() { System.out.println(\男人在吃\ * }

Decorator

public abstrac* class Decorator implements Perso* {

protected Person person*

public void setPerson(Person person) { this.person = person; }

public void eat() { person.eat(); } }

ConcreteDec*rator

publi* class ManDecoratorA extends Decorator {

26

Java设计模式(疯狂Java联盟版)

public void eat() { super.eat(); reEat();

Sy*tem.out.println(\类\ }

public void reEat() {

System.out.println(\再吃一顿饭\ * }

public class ManDecoratorB extends Decorator *

public void eat() { super.eat();

Syst*m.out.println(\ System.out.println(\类\ } }

Test

public class Test {

public st*tic void main(Strin*[] args) { Man man = new Man();

ManDecoratorA md1 = new ManDecoratorA(); ManDecoratorB md2 = n*w ManDecoratorB();

md1.setPerson(man); md2.setPerson(md1); md2.eat(); } }

result

男人在吃 再吃一顿饭

ManDecoratorA类 =============== ManDecoratorB类

1.2.5 外观模式

27

Java设计模式(疯狂Java联盟版)

为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这*子系统更加容易使用。

适用性

1.当你要为一个*杂子系统提供一个简单接口时。子系统往往因为不断演化而变得越来越

复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更具可重用性,也更容

易对子系统进行定制,但这也给*些不需要定制子系统的用户带来一些使用上的困难。

Fa*ade可以提供一个简单的缺省视图,这一视图对大多数用户来说已经足*,而那些需

要更多的可定制性的用户可以越过facade层。

2.客户程序与抽象类的实现部分之间存在着很大的依赖性。引入facade将这个子系统与客

户以及其他的子系统分离,可以提高子系统的独立性和可移植性。

3.当你需要构建一个层次结构的子系统时,使用facade模式定义子系统中每层的入口点。

如果子系统之间是相互依赖的,你可以让它们仅通过facade进行通讯,从而简化了它们

之间的依赖关系。

参与者

1.Facade

知道哪些子系统类负责处理请求。

将客户的请求代理给适当的子系统对象。

2.Subsystemclasses 实现子系统的功能。

处理由Facade对象指派的任务。

没有facade的任何相关信息;即没有指向*acade的指针。

类图

28

Java设计模式(疯狂Java联盟版)

例子 Facade

publi* class Facade {

ServiceA s*;

ServiceB sb;

ServiceC sc;

public Facade() {

sa = new S*rviceAImpl(); sb = new *erviceBImpl(); sc = new ServiceCImpl(); }

public void methodA() { sa.methodA(); sb.methodB(); }

publi* void methodB() { s*.methodB(); sc.methodC(); }

public void methodC() { sc.methodC(); sa.methodA(); }

29


Java的23种设计模式(疯狂Java总结)(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:浙江美丽乡村考察体会(20170613)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: