某移动社交软件欲增加一个群组(Group)功能。通过设置,用户可以将自己的动态信息,包括最新动态、新上传的视频以及分享的链接等,分享给某个特定的成员(Member),也可以分享给某个群组中的所有成员;用户可以将成员添加至某个指定的群组;此外,还允许用户在一个群组中添加子群组,以便更加灵活地实现面向特定人群的信息共享。
选择一种合适的设计模式来设计该群组功能,要求给出该模式的名称及定义,结合场景绘制相应的结构图并编程模拟实现(类名、方法名和属性名可自行定义)。
类图:
模式:组合模式
定义:组合多个对象形成树型结构以表示具有部分-整体关系的层次结构。组合模式让客户端可以统一对待单个对象和组合对象。
Composite Pattern:Compose objects into tree structures to represent part-whole hierarchies.Composite lets clients treat individual object and compositions of object uniformly.
实现代码:
|
抽象构件类Component : package CompositePattern;
public abstract class Component { public abstract void add(Component ccomponent); public abstract void remove(Component component); public abstract void share(Component component) ; } 叶子构件类Member: package CompositePattern;
import java.util.ArrayList;
public class Member extends Component {
public Member(String name){ this.name=name; } public String getName() { return name; }
public void setName(String name) { this.name = name; }
private String name; @Override public void add(Component ccomponent) { System.out.println("调这个函数也没用"); }
@Override public void remove(Component component) { System.out.println("调这个函数也没用"); }
@Override public void share(Component component) { if (component instanceof Group){ ArrayList<Component> components = ((Group)component).getComponents();
if (components.contains(this)){ components.remove(this);
} for (Component obj:components){ obj.share(obj); } components.add(this); }else if (component instanceof Member){ ((Member)component).onMessage(); }
}
public void onMessage() { System.out.println(this.getName()+"收到消息"); } } 容器构件类Group : package CompositePattern;
import java.util.ArrayList;
public class Group extends Component { public Group(String name){ this.name = name; }
public ArrayList<Component> getComponents() { return components; }
public String getName() {
return name; }
public void setName(String name) { this.name = name; }
private String name; public ArrayList<Component> components = new ArrayList<>();
@Override public void add(Component ccomponent) { components.add(ccomponent);
}
@Override public void remove(Component component) { components.remove(component); }
@Override public void share(Component component) { if (component instanceof Group){ ArrayList<Component> com = ((Group)component).getComponents(); for (Component object:components){ object.share(object); } }else if (component instanceof Member){ ((Member)component).onMessage(); }
}
} 客户端类Client : package CompositePattern;
public class Client { public static void main(String[] args) {
Component group1 = new Group("Group1"); Component member1 = new Member("member1"); Component member2 = new Member("member2"); Component member3 = new Member("member3"); Component member4 = new Member("member4"); group1.add(member1); group1.add(member2); group1.add(member3); group1.add(member4); System.out.println(((Member)member1).getName()+"分享了一条新动态"); member1.share(group1); System.out.println("---------------------------"); Component group2 = new Group("group2"); group2.add(group1); Component member5 = new Member("member5"); group2.add(member5); System.out.println(((Member)member5).getName()+"分享了一条新动态"); member5.share(group2); } }
|