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

2019-08-26 18:02

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

类图

例子 Target

public interface Target {

void adapteeMethod();

void adapterMethod(); }

Adaptee

public class Adaptee {

public void adapteeMethod() {

Syste*.out.p*intln(\ } }

Adapt*r

public clas* Adapter implement* Target {

private Adap*ee adaptee;

public Adapter(Adaptee adaptee) { this.adapte* = adaptee; } public void adapteeMethod() { adaptee.adapteeMethod(); } public void adapterMethod() { *ystem.out.println(\ }

16

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

}

Client

public cla*s Test {

public stati* void main(String[] args) {

Target target = new Adapter(new Adaptee()); tar*et.adapteeMethod();

target.adapterM*thod(); } }

result

Adaptee method! Adapter method!

1.2.2 桥接模式

将抽象部分与它*实现部分分离,使它们都可以独立地变化。

适用性

1.你不希望在抽*和它的实现部分之间有一个固定的绑定关系。

例如这种情况可能是因为,在程序运行时刻实现部分应可以*选择或者切换。

2.类的抽象以及它的实现都应该可以通*生成子类的方法加以扩充。 这时Bridge模式使你可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充。

3.对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译。

4.正如在意图一节的第一个类图中所示的那样,有许多类要生成。 这*一种类层次结构说明你必须将一个对象分解成两个部分。

5.*想在多个对象间共享实现(可能使用引用计数),但同时要求客户并不知*这一点。

参与者

1.Abstraction

定义抽象类的接口。

17

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

维护一个指向Implementor类型对象的指针。

2.RefinedAbstraction

扩充由Abstraction定义的接口。

3.Implementor

定义实现类的接口,该接口不一定要与Ab*traction的接口完全一致。 事实上这两个接口可以完全不同。

*般来讲,Implementor接口仅提供基本操作,而Abstraction则定义了基于这些基本操作的较高层次的操作。

4.ConcreteImplementor

*现Implementor接口并定义它的具体实现。

类图

例子 Abstr*ction

public abstract class Person {

private Clothing clothing;

pr*vate String type;

public Clothing getClothing() { return clothing; }

publi* void setClothing() {

this.clothing = *lothingFactory.getClothing(); }

18

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

public void setType(String type) { t*is.type = type; }

public String getType() { return this.ty*e; }

public abstract void dress(); }

RefinedAbstraction

public class Man extends *erson {

public Man() {

setType(\男人\ }

public void dress() {

Clothing clothing = get*lothing(); clothing.personDressCloth(this); } }

public class Lady extends Person {

public Lady() {

setTyp*(\女人\ }

public void dress() {

Cloth*ng clothing = getClothing(); c*othing.personDressCloth(this); } }

Implemento*

public abstract class Clothing {

public abstract void personDressC*oth(*erson person); }

ConcreteImplemento*

public class *ack*t extends Clothing {

19

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

public void personDressCloth(Person person) {

System.out.println(person.getType() + \穿马甲\ } }

public cl*ss Trouser extends Clothing {

public void personDressCloth(Person person) {

System.ou*.println(*erson.getType() + \穿裤子\ } }

Test

public class Te*t {

public s*atic void main(String[] args) {

Person man = new Man();

Person lady = new Lady();

Clothing jacket = new Ja*ket();

Clot*ing trouser = new Trouser();

jacket.personDressCloth(man); trouser.personDressCloth(man);

j*cket.personDressCloth(lady); trouser.personDressCloth(lady); } }

result

男人穿马甲 男人穿裤子 女人穿马甲 女人穿裤子

1.2.3 组合模式

20


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

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

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

马上注册会员

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