美文网首页架构算法设计模式和编程理论Java设计模式
大话设计模式(7) --- 组合模式|迭代器模式|单例模式

大话设计模式(7) --- 组合模式|迭代器模式|单例模式

作者: 官子寒 | 来源:发表于2020-02-08 08:31 被阅读0次

1. 组合模式

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

组合模式
public abstract class Component {
    protected String name;

    public Component(String name) {
        this.name = name;
    }

    public abstract void add(Component c);
    public abstract void remove(Component c);
    public abstract void display(int depth);
}
public class Leaf extends Component {

    public Leaf(String name) {
        super(name);
    }

    @Override
    public void add(Component c) {
        System.out.println("不能加入新的节点");
    }

    @Override
    public void remove(Component c) {
        System.out.println("不能移除节点");
    }

    @Override
    public void display(int depth) {
        StringBuilder line = new StringBuilder();
        for(int i = 0; i < depth; i++) {
            line.append("-");
        }
        System.out.println(line.toString() + name);
    }
}
import java.util.ArrayList;

public class Composite extends Component {
    ArrayList<Component> CompositeList = new ArrayList<>();
    public Composite(String name) {
        super(name);
    }

    @Override
    public void add(Component c) {
        CompositeList.add(c);
    }

    @Override
    public void remove(Component c) {
        CompositeList.remove(c);
    }

    @Override
    public void display(int depth) {
        StringBuilder line = new StringBuilder();
        for(int i = 0; i < depth; i++) {
            line.append("-");
        }
        System.out.println(line.toString() + name);
        for (Component c: CompositeList) {
            c.display(depth + 2);
        }

    }
}
public class CompoenentClient {
    public static void main(String[] args) {
        Composite c = new Composite("ROOT");
        c.add(new Leaf("LeafA"));
        c.add(new Leaf("LeafB"));
        Composite compositeA = new Composite("CompositeA");
        c.add(compositeA);
        compositeA.add(new Leaf("LeafC"));
        c.display(1);
    }

}
  • 如果希望客户忽略组合对象和单个对象的不同,统一地使用组合结构中的所有对象时,就应该考虑使用组合模式了

2. 迭代器模式

迭代器模式,提供了一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示

  • 当需要对聚集进行多种方式遍历时,可以用迭代器模式
迭代器模式

3. 单例模式

保证一个类仅有一个实例,并提供访问它的一个全局访问点

public class single {
    String name;
    static single single_instance;
    private single() {
        this.name = "guanzihan";
    }

    public static single getSingle_instance() {
        if(single_instance != null) {
            single_instance =new single();
        }
        return single_instance;
    }
}

3.1 多线程时的单例

public class single {
    String name;
    static single single_instance;
    private static Object obj = new Object();
    private single() {
        this.name = "guanzihan";
    }

    public static single getSingle_instance() {

        synchronized (obj) {
            if(single_instance != null) {
                single_instance =new single();
            }
            return single_instance;
        }

    }
}

3.2 静态初始化

  • 静态初始化的方式是在自己被加载时就将自己实例化,所以被称为饿汉式单例类
  • 单例模式是在第一次被引用时将自己实例化,所以被称为懒汉式单例类

相关文章

  • 大话设计模式(7) --- 组合模式|迭代器模式|单例模式

    1. 组合模式 组合模式,将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象...

  • C++笔记十三(C++设计模式)

    本周内容(1)单件模式(2)享元模式(3)状态模式(4)备忘录(5)组合模式(6)迭代器(7)职责链(8)命令模式...

  • 常见六种设计模式.2018-08-01

    单例模式 工厂模式 策略模式 观察者模式 迭代器模式 模板方法模式 https://www.jianshu.com...

  • 面试 (七) : 其他篇 -- 设计模式

    常用的设计模式 • 单例模式 • 组合模式 • 观察者模式 • 代理模式 • 享元模式 • 工厂方法模式 • 抽象...

  • 大话设计模式之_单例模式

    大话设计模式之___单例模式 什么是单例模式单例模式有哪些(会顺带讲些懒汉式的性能优化)懒汉式与饿汉式的区别 什么...

  • 设计模式 - 单例模式

    设计模式 - 单例模式 什么是单例模式 单例模式属于创建型模式,是设计模式中比较简单的模式。在单例模式中,单一的类...

  • 单例模式Java篇

    单例设计模式- 饿汉式 单例设计模式 - 懒汉式 单例设计模式 - 懒汉式 - 多线程并发 单例设计模式 - 懒汉...

  • iOS面试

    常用的设计模式 •单例模式 •组合模式 •观察者模式 •代理模式 •享元模式 •工厂方法模式 •抽象工厂模式 #M...

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • Boolan C++设计模式第三周心得笔记

    单件模式 享元模式 状态模式 备忘录 组合模式 迭代器 职责链 命令模式 访问器 解析器 本周作业 本次作业要求针...

网友评论

    本文标题:大话设计模式(7) --- 组合模式|迭代器模式|单例模式

    本文链接:https://www.haomeiwen.com/subject/orpnzctx.html