6. 容器访问方法
如果对象中包含了一个容器,那么它应该怎样暴露给其他的对象呢?最简单的方法是提供一个get方法,比如:
List<books> getBooks() {
return books;
}
这样暴露的接口给了客户最大的灵活性,客户获得这个容器之后,可以进行任何操作。现在假设这么一种场景:
该对象里面某一些内部状态依赖于这个容器,如果修改这个容器里面的内容会影响到这些内部状态。那么直接返回这个容器,将会导致这些内部状态变得不可控了。
这个时候,应该为这个容器提供一些限制性的,意义明确的访问途径。比如:
void addBook(Book arrival) {
books.add(arrival);
}
int bookCount() {
return books.size();
}
Iterator getBooksIterator() {
return books.iterator();
}
这样就能够防止用户修改容器,导致内部状态的不可控。
7. 安全副本
假设有两个对象都以为知己可以独占地访问某一容器A,也就是这两个对象希望对容器A的操作不相互影响。那么在用get方法获取容器A的时候,就必须对其进行复制。比如:
List<Book> getBooks() {
List<Book> result = new ArrayList<Book>();
result.addAll(books);
return result;
}
其实这是一种补救措施,出现这种情况,标明程序有深层的设计问题。
分享到:
相关推荐
模板方法模式的核心思想是抽象类定义了一个模板方法,这个模板方法由一系列基本操作组成,这些操作在抽象类中可能被声明为虚函数,由具体的子类来实现。模板方法模式通常包含以下几个关键组成部分: 1. **抽象类...
模板方法模式是一种行为设计模式,它允许在定义行为框架的同时,延迟部分具体步骤到子类中实现。这种模式主要用于在父类中定义算法的骨架,而将一些步骤的实现细节留给子类去完成,从而使得不同的子类可以重用相同的...
模板方法模式是面向对象设计模式中的行为模式之一,它在Java等面向对象编程语言中有着广泛的应用。模板方法模式的主要思想是在一个抽象类中定义一个算法的骨架,而将一些步骤延迟到子类中实现。这样,子类可以重写...
该文档总结了一种通过切换主题实现夜间模式的方法。 有兴趣的同学可以参考,有不懂的地方欢迎留言,共同进步! 谢谢!
在策略模式结合模板方法模式中,首先需要定义一个抽象的父类,这个父类是策略模式的模板类,里面定义了算法实现的骨架,然后让具体的策略算法去实现变化的部分。这使得策略模式更加灵活和可扩展。此外,在实际应用中...
本实验旨在通过这两种模式来实现对数据库的高效访问,并利用Servlet技术构建一个完整的Web应用。 首先,DAO模式是一种用于分离业务逻辑层与数据访问层的模式。在该模式中,DAO类作为数据存取的接口,负责处理与...
在编程领域,实现模式是一种经过实践验证的解决特定问题或执行特定任务的可重用方法。这些模式通常在多种编程语言中都能找到应用,因为它们是跨语言的抽象概念。"编程语言实现模式"这个主题涵盖了如何在不同的编程...
2. **工厂方法模式** 工厂方法模式将具体的对象创建过程延迟到子类中,通过接口或抽象类定义创建对象的方法,每个子类对应一个具体的产品。这种方式使得系统更具有扩展性,增加了新的产品只需添加新的子类即可,...
工厂方法模式是设计模式中的创建型模式之一,它在软件工程中扮演着非常重要的角色,尤其是在C#这样的面向对象编程语言中。工厂方法模式提供了一种封装对象创建过程的方法,使得具体的创建过程延迟到子类中进行,从而...
python 实现 状态模式2(面向过程的方式-方法版) python 实现 状态模式3(分类版) python 实现 状态模式4 python 实现 抽象工厂模式1 python 实现 抽象工厂模式2 python 实现 代理模式 python 实现 工厂模式 ...
### 深入浅出设计模式之模板方法模式 #### 一、模板方法模式概述 设计模式是软件工程中一种非常重要的技术手段,它能够帮助我们解决常见的编程问题,并提高代码的可重用性、可扩展性和可维护性。模板方法模式是一...
通过分析这些代码,我们可以看到如何在实际项目中运用桥梁模式,例如,如何定义抽象接口,如何创建实现接口的类,以及如何在具体抽象类中通过接口引用实现类的方法。 桥梁模式的应用场景广泛,例如在图形用户界面...
### 软件设计之工厂方法模式解析及Java实现 #### 一、工厂方法模式概述 工厂方法模式(Factory Method Pattern)是一种常用的面向对象设计模式,属于创建型模式之一。它提供了一种创建对象的最佳方式。在工厂方法...
在Java中,模板方法模式通常通过抽象类来实现。抽象类定义了基本操作,这些操作由具体子类实现。模板方法通常是一个抽象方法,它调用这些基本操作,形成一个完整的算法流程。这种方式有助于减少代码重复,保持代码的...
这种模式常用于实现发布-订阅(Publish-Subscribe)模式,即发布者发布事件,订阅者接收并处理这些事件。 在《设计模式实现——观察者模式》这篇博客中,作者可能详细解释了观察者模式的概念、结构以及其在实际编程...
工厂方法模式是面向对象设计模式中的一个核心模式,属于创建型模式。在Java中,它提供了一种将实例化过程推迟到子类中进行的方法,从而使得类的实例化过程可定制,增强了系统的灵活性和扩展性。这个模式的核心在于...
在这个压缩包中,`FactoryMethod`可能包含了Java实现工厂方法模式的源代码示例。 设计模式是一种在特定场景下解决软件设计问题的通用、可重用的解决方案,它代表了最佳实践,被广泛应用于各种编程语言中。工厂方法...
2. `Observer`接口:定义了观察者的接口,包含`update()`方法。 3. 具体的`Observer`子类:如`ConcreteObserver`,实现`Observer`接口,定义了`update()`方法的具体实现。 4. `Observable`类:在Java中,这是内置的...
由于咖啡的制作流程与奶茶有所不同,但又有很多相似之处(比如都需要装杯、加热),我们可以使用装饰者模式来实现这一需求。创建一个咖啡装饰器类,它包装了奶茶类并扩展其行为,添加制作咖啡的特定步骤。这样,原来...