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

2019-08-31 18:02

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 {

20

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 组合模式

21

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

将对象组合成树形结构以表示\部分-整体\的层次结构。\使得用户对单个对象和组合对*的使用具有一致性。\

适用性

1.你想表示对象的部分-整*层次结构。

2.你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。

参与者

1.Component

为组合中的对象声明接口。

在适当的情况下,实现所有类共有接口的缺省行为。 声明一个接口用于访问和管理Component的子组件。

(可选)在递归结构中定义一个接口,用于访问一个父部件,并在合*的情况下实现它。

2.Leaf

在组合中表示叶节点对象,叶节点没有子节点。 在组合中定义节点对象的行为。

3.Compos*te

定义有子部件的*些部件的行为。 存储子部件。

在Component接口中实现与子部件有*的操作。

4.Client

通过Component接*操纵组合部件的对象。

类图

例子 Component

22

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

p*blic abstract class Employer {

private String name;

public void setName(String name) { this.name = *ame; }

public String getName() { return this.name; }

public abstract void add(Employer employer*;

public abstract void delete(Employer employer);

public List employers;

public void printInfo*) {

System.out.println(name); }

*ublic List getE*ployers() { return this.employers; } }

Leaf

public class Programmer extends Employer {

public Programmer(String name) { setNam*(name);

employers = null;//程序员, 表示没有下属了 }

public v*id add(Employer employer) { }

public void delete(Employer employer) { } }

23

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

public class Pro*ectAssistant extends Employer {

public ProjectAss*stant(String name) { setName(name);

employers = *ull;//项目助理, 表示没有下属了 }

public void add(Employer employer) { }

public void delet*(Employer employer) { } }

Composite

public class Project*anager extends E*ployer {

public ProjectManager(String name) { setName(name);

employers = new A*rayList(); }

public void add(Employer employer) { employers.add(employer); }

public void delete(Emplo*er employer) { employers.remove(employer); } }

Clie*t

publ*c class Test {

public st*tic void main(String[] args) {

Employer pm = new ProjectManager(\项目经理\ Emplo*er pa = new ProjectAssistant(\项目助理\ Employer progra*mer1 = new Programmer(\程序员一\ Employer programmer2 = new Programmer(\程序员二\

pm.add(pa);//为项目经理添加项目助理

pm.add(programmer2);//*项目经理*加程序员

24


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

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

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

马上注册会员

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