常用设计模式——组合模式

设计模式系列

1、组合模式
2、策略模式
3、单例模式
4、原型模式
5、模板模式
6、观察者模式
7、享元模式
8、装饰着模式
9、门面模式
10、责任链模式
11、建造者模式
12、适配器模式

什么是组合模式

组合模式就是把类似的对象组合在一个对象中方便使用,怎么组合呢,就是树形结构来组合。比如用人来作为一个对象的话,我们就可以用组合模式来组合人际关系,我有家人、朋友、同事等关系的人,我的朋友又有他的家人、朋友、同事等关系的人,以此类推就会有好多个类似的对象了。
码云地址:去看源码

示例

1、定义一个 Person

定义一个 Person ,每个人都有自己的朋友,朋友还有他们自己的朋友,朋友的朋友还要朋友,这样就构成了一个关系网。
我们从一个关系网定一个跟节点,比如说我,下面有兄弟姐妹,我的兄弟姐妹又有他们的朋友,朋友又有自己的兄弟姐妹等。
那么我们在工作中也有这样的常见,相当于自关联表结构。

class Person{

    private String name;
    private int age;
    private int gender;
    private List<Person> friends = new ArrayList<>();

    public Person(String name, int age, int gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    public String getName() {
        return name;
    }

    public void addPerson(Person person){
        this.friends.add(person);
    }

    public void delPerson(Person person){
        this.friends.remove(person);
    }

    public List<Person> getFriends() {
        return friends;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", gender=" + gender +
                '}';
    }
}

2、测试

public class CompositeTest {

    public static void main(String[] args) {

        Person person = new Person("Phen", 24, 1);
        person.addPerson(new Person("Ryan", 28, 1));
        Person thor = new Person("Thor", 29, 1);
        thor.addPerson(new Person("wenju", 26, 0));
        thor.addPerson(new Person("jiazhen", 26, 0));
        person.addPerson(thor);
        System.out.println(person);
        System.out.println("我的朋友:");
        person.getFriends().forEach(p -> {
            System.out.println(p);
            if(p.getFriends().size() > 0){
                System.out.println(p.getName() + "的朋友:");
                p.getFriends().forEach(System.out::println);
            }
        });
    }
}

执行结果:
Person{name=‘Phen’, age=24, gender=1}
我的朋友:
Person{name=‘Ryan’, age=28, gender=1}
Person{name=‘Thor’, age=29, gender=1}
Thor的朋友:
Person{name=‘wenju’, age=26, gender=0}
Person{name=‘jiazhen’, age=26, gender=0}
从执行结果可以看出我的朋友是 Ryan,Thor, 那么 Thor 的朋友是 wenju, jiazhen,那么wenju, jaizhen 也是我的朋友,也可以往我的下面 add, 这样的话最后就构成了一个复杂的关系网,也就是把类似的对象组合到一起了。

3、总结

总而言之,组合模式就是为了更好的组合我们的业务数据,有些是自己关联,比如说在工作中,有的页面的菜单是动态的,用户可以自定义,那么我们就可以用 Menu 里面有 子 Menu, 菜单下面有子菜单。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值