Java必学的23种设计模式(详细)(6)

2019-08-26 18:02

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 外观模式

26

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

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

适用性

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

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

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

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

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

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

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

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

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

之间的依赖关系。

参与者

1.Facade

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

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

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

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

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

类图

27

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(); }

28

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

}

Subsystemclasse*

public *lass ServiceAImpl implements ServiceA {

public void methodA() {

System.out.println(\这是服务A\ } }

public class ServiceBImpl implements ServiceB {

public void methodB() {

System.out.println(\这是服务B\ * }

public class ServiceCImpl implements ServiceC {

public void methodC() {

System.out.println(\这是服*C\ } }

Test

public class Test {

public static voi* main(String[] args) { ServiceA sa = new ServiceAImpl(); Ser*iceB sb = new ServiceBImpl();

sa.metho*A(); sb.methodB();

System.out.println(\ //facade

Facade facade = new Facade(); facade.methodA(); facade.methodB(); } }

resu*t

这是服务A

29

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

这是*务B ======== 这是服务A 这是服务B 这是服务B 这是服务C

1.2.6 享元模式

运用共享技术有效地支持大量细粒度的对象。

适用性

当都具备下列情况时,使用Flyweight模式:

1.一个应用程序使用了大量的*象。

2.完全由于使用大量的对象,造成很大的存储开销。

3.对象*大多数状态都可变为外部状态。

4.如果删除对象的外部状态,那么可以*相对较少的共享对象取代很多组对象。

5.应用程序不依赖于对象标识。由于Flyweight对象可以被共享,对于*念上明显有别的对象,标识测试将返回真值。

参与者

1.Flyweight

描述一个接口,通过这个接口flyweight可以接受并作用于外部状态。

2.ConcreteFlyweight

实现Flyweight接口,并为内部状态(如果有的话)增加存储空间。

Concrete*lyweight对象必须是可共享的。它所存储的状态必须是内部的;即,它必须独立于ConcreteFlyweight对象的场景。

3.UnsharedConcreteFlyweigh*

并非所有的Flywe*ght子类都需要被共享。Flyweight接口使共享成为可能,但它并不强制共*。

在Flyweight对象结构的某些层次,UnsharedConcreteFlyweight对象通常将ConcreteFlyweight对象作为子节点。

4.Flyweigh*Factory

30


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

下一篇:2016年秋季新版湘教版七年级数学上学期4.2、线段、射线、直线同

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

马上注册会员

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