当需求是体现部分与整体结构,用户可以忽略组合对象与单个对象的不同,统一使用组合结构中的所有对象时,可以使用组合模式.
比如:加盟连锁店,在总店消费和加盟店消费可以同样获得积分和参加活动.
java实现代码如下
package com.liu.pattern9;
import java.util.ArrayList;
public class Composite {
public static void main(String[] args) {
// TODO Auto-generated method stub
Store branch = new Branch("上海总店");
Store join1 = new Join("川沙加盟店");
Store join2 = new Join("南汇加盟店");
branch.add(join1);
branch.add(join2);
branch.consume();
}
}
interface Store{
public void add(Store store);
public void remove(Store store);
public void consume();
}
class Branch implements Store{
private ArrayList<Store> list = new ArrayList<Store>();
private String name;
public Branch(String name){
this.name = name;
}
@Override
public void add(Store store) {
// TODO Auto-generated method stub
list.add(store);
}
@Override
public void remove(Store store) {
// TODO Auto-generated method stub
list.remove(store);
}
@Override
public void consume() {
// TODO Auto-generated method stub
System.out.println(name+"进行消费");
for(Store store : list){
store.consume();
}
}
}
class Join implements Store{
private ArrayList<Store> list = new ArrayList<Store>();
private String name;
public Join(String name){
this.name = name;
}
@Override
public void add(Store store) {
}
@Override
public void remove(Store store) {
}
@Override
public void consume() {
// TODO Auto-generated method stub
System.out.println(name+"进行消费");
}
}
c#代码如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
namespace com.liu.pattern9
{
class Composite
{
static void Main(string[] args)
{
Store branch = new Branch("上海总店");
Store join1 = new Join("川沙加盟店");
Store join2 = new Join("南汇加盟店");
branch.Add(join1);
branch.Add(join2);
branch.Consume();
System.Console.ReadKey();
}
}
interface Store{
void Add(Store store);
void Remove(Store store);
void Consume();
}
class Branch : Store{
private ArrayList list = new ArrayList();
private String name;
public Branch(String name){
this.name = name;
}
public void Add(Store store) {
// TODO Auto-generated method stub
list.Add(store);
}
public void Remove(Store store) {
// TODO Auto-generated method stub
list.Remove(store);
}
public void Consume() {
// TODO Auto-generated method stub
System.Console.WriteLine(name+"进行消费");
foreach(Store store in list){
store.Consume();
}
}
}
class Join : Store{
private ArrayList list = new ArrayList();
private String name;
public Join(String name){
this.name = name;
}
public void Add(Store store) {
}
public void Remove(Store store) {
}
public void Consume() {
// TODO Auto-generated method stub
System.Console.WriteLine(name + "进行消费");
}
}
}