- 浏览: 202336 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
yixinhu:
你好 能加下你的QQ么 我怎么打出来的exe点击都没反应啊.. ...
java 生成exe 文件 -
chenxiang105:
如果不需要flash 只需要做图片的翻页效果 这个是否也合适类 ...
jQuery插件page peel AD实现动态卷页、翻页或卷角flash广告效果 -
tuoxie007:
幸苦,好文章!
jetspeed门户项目组介绍 -
bobo:
需要考虑不同浏览器的兼容性
通过网页访问本地资源程序 -
tag13346:
说得这么玄,看下
时空趋势理论 --- 超越时空的均线技术(转载 )
允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。
创建一个树形结构,在同一个结构中处理嵌套菜单和菜单项组。通过将菜单和项放在相同的结构中,我们创建了一个“整体/部分”层次结构,即使由 菜单 和 菜单 项 组成 的 对象 树 。但是 可以 将 他视为 一个 整体,像是 一个 丰富的大菜单 。
1.我们应该努力让一个类只分配一个责任。
2.组合模式提供了一种结构,可同时包容个别对象和组合对象。
3。组合模式允许客户对个别对象和组合对象一视同仁。
4.组合结构内的任意对象称为组件,组件可以是组合,也可以是叶子节点。
5.在实现组合模式时,有许多设计上的 折中。你要根据需要平衡透明性和安全性。
package pattern; import java.util.ArrayList; import java.util.Iterator; import java.util.Stack; public class MenuTestDrive2 { public static void main(String[] args) { MenuComponent pancakeHouseMenu = new Menu("PANCAKE HOUSE MENU","Breakfast"); pancakeHouseMenu.add(new MenuItem("K&B'S Pancake Breakfast", "Pancakes with scrambled eggs,and toast", true, 2.99)); pancakeHouseMenu.add(new MenuItem("Regular Pancake Breakfast", "Pancakes with fried eggs,and sausage", true, 2.99)); pancakeHouseMenu.add(new MenuItem("BlueBerry Pancakes ", "Pancakes made with fresh blueberries", true, 3.49)); pancakeHouseMenu.add(new MenuItem("Waffles", "Waffles with your choice of blueberries or strawberries", true, 3.59)); MenuComponent dinerMenu = new Menu("DINER MENU","Lunch"); MenuComponent cafeMenu = new Menu("CAFE MENU","dINNER"); MenuComponent dessertMenu = new Menu("DESSERT MENU","Dessert of course!"); MenuComponent allMenus=new Menu("ALL MENUS","ALL menus combined"); allMenus.add(pancakeHouseMenu); allMenus.add(dinerMenu); allMenus.add(cafeMenu); cafeMenu.add(new MenuItem("Vegegie Burger and Air Fries", "Veggie burger on a whole wheat bun,lettuce,tomato,and fries", true, 3.99)); dinerMenu.add(new MenuItem("Soup of the day", "A cup of the soup of the day,with a side salad", true, 2.99)); dinerMenu.add(new MenuItem("Burrito", "A large burrito , with whole pinto beans,salsa,guacamole", true, 2.99)); dinerMenu.add(new MenuItem("Hotdog", "A hot dog, with saurkraut,relish,onions,topped with cheese", true, 2.99)); dinerMenu.add(new MenuItem("Pasta","Spaghetti with Marinara Sauce,and a slice of sourdough bread",true,3.89)); dinerMenu.add(dessertMenu); dessertMenu.add(new MenuItem("Apple Pie","Apple pie with a flakey crust,topped with vanilla ice cream",true,1.59)); Waiter waitress = new Waiter(allMenus); waitress.printMenu(); } } abstract class MenuComponent{ public void add(MenuComponent menuComponent){ throw new UnsupportedOperationException(); } public void remove(MenuComponent menuComponent){ throw new UnsupportedOperationException(); } public MenuComponent getChild(int i){ throw new UnsupportedOperationException(); } public String getName(){ throw new UnsupportedOperationException(); } public String getDescription(){ throw new UnsupportedOperationException(); } public double getPrice(){ throw new UnsupportedOperationException(); } public boolean isVegetarian(){ throw new UnsupportedOperationException(); } public void print(){} public Iterator createIterator(){ throw new UnsupportedOperationException(); } } class MenuItem extends MenuComponent{ String name; String description; boolean vegetarian; double price; public MenuItem(String name, String description, boolean vegetarian, double price) { this.name = name; this.description = description; this.vegetarian = vegetarian; this.price = price; } public String getName() { return name; } public String getDescription() { return description; } public boolean isVegetarian() { return vegetarian; } public double getPrice() { return price; } public void print(){ System.out.print(" "+getName()); if(this.isVegetarian()){ System.out.println("(v)"); } System.out.println(","+getPrice()); System.out.println(" ---"+getDescription()); } public Iterator createIterator(){ return new NullIterator(); } } class Menu extends MenuComponent{ ArrayList menuComponents=new ArrayList(); String name; String description; public Menu(String name,String description){ this.name=name; this.description=description; } public void add(MenuComponent menuComponent){ menuComponents.add(menuComponent); } public void remove(MenuComponent menuComponent){ menuComponents.remove(menuComponent); } public MenuComponent getChild(int i){ return (MenuComponent)menuComponents.get(i); } public String getName(){ return name; } public String getDescription(){ return description; } public void print(){ System.out.print("\n"+getName()); System.out.println(","+getDescription()); System.out.println("-------------------------"); Iterator iterator =(Iterator)menuComponents.iterator(); while(iterator.hasNext()){ MenuComponent menuComponent=(MenuComponent)iterator.next(); menuComponent.print(); } } public Iterator createIterator(){ return new CompositeIterator(menuComponents.iterator()); } } class CompositeIterator implements Iterator{ Stack stack=new Stack(); public CompositeIterator(Iterator iterator){ stack.push(iterator); } public Object next(){ if(hasNext()){ Iterator iterator=(Iterator)stack.peek(); MenuComponent component=(MenuComponent)iterator.next(); if(component instanceof Menu){ stack.push(component.createIterator()); } return component; }else{ return null; } } public boolean hasNext(){ if(stack.empty()){ return false; }else{ Iterator iterator =(Iterator)stack.peek(); if(!iterator.hasNext()){ stack.pop(); return hasNext(); }else{ return true; } } } public void remove(){ throw new UnsupportedOperationException(); } } class NullIterator implements Iterator{ public Object next(){ return null; } public boolean hasNext(){ return false; } public void remove(){ throw new UnsupportedOperationException(); } } class Waiter { MenuComponent allMenus; public Waiter(MenuComponent allMenus){ this.allMenus=allMenus; } public void printMenu() { this.allMenus.print(); } public void printVegetarianMenu(){ Iterator iterator=allMenus.createIterator(); System.out.println("\nVEGETARIAN MENU\n---"); while(iterator.hasNext()){ MenuComponent menuComponent=(MenuComponent)iterator.next(); try{ if(menuComponent.isVegetarian()){ menuComponent.print(); } } catch(UnsupportedOperationException e){} } } }
发表评论
-
Iterator patten 读书笔记
2008-04-10 18:07 1060提供 一种方法 顺序访问 一个聚和 对象中的各个元素,而又不暴 ... -
模版模式 读书笔记
2008-04-10 18:04 1764在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模版 ... -
Facade patten 读书笔记
2008-04-10 18:03 981提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一 ... -
Adapter patten 读书笔记
2008-04-10 18:01 967将一个类的接口,转换成客户期待的另一个接口。适配器让原本接口不 ... -
command patten 读书笔记
2008-04-10 17:56 9101 。命令模式将发出请求的对象和执行请求的对象解耦。 2。在被 ... -
单例模式 读书笔记
2008-04-07 18:44 911确保一个类只有一个实 ... -
抽象工厂模式读书笔记
2008-04-07 18:39 989提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具 ... -
工厂方法 读书笔记
2008-04-03 14:27 1138工厂发法定义了一个创建对象的接口或者抽象类,但是有子类来决定要 ... -
装饰者模式 读书笔记
2008-04-03 14:25 2141package pattern; public clas ... -
观察者模式(读书笔记)
2008-04-01 18:33 1132观察者模式定义了对象之间的一对多依赖,这样一来当一个对象改变状 ... -
Head First Design Patterns 读后感3-策略模式
2008-04-01 18:32 1335策略模式-定义了算法族,分别封装起来,让他们之间可以相互替换, ... -
Head First Design Patterns 读后感2 设计原则
2008-03-31 13:47 11611。软件开发中唯一一个不变的是 变化。大千世界,千奇百怪,行行 ... -
Head First Design Patterns 读后感1
2008-03-31 13:46 1421如何让大脑把记得更深刻 1。慢点,你理解的越多,记得月少 2。 ... -
proxy state 读书笔记
2008-03-28 18:35 1702定义:为另一个对象提供一个替身或者战位符以范围这个对象。 要点 ... -
阅读不懂,图书之过——《大话设计模式》创作历程 (转载)
2008-03-28 11:41 1133写这本书的确是个意外,因为在之前,我和所有的做技术的朋友一样, ... -
state patten 读书笔记
2008-03-25 14:53 1217允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的 ...
相关推荐
结构型模式则涉及如何组合类和对象,包括适配器、桥接、组合、装饰器、外观、享元和迭代器模式,它们提供了增强结构和解耦的手段。行为型模式专注于类或对象间的交互和职责分配,如模板方法、命令、解释器、责任链、...
4. 合成/聚合复用原则(Composite/Aggregate Reuse Principle):优先使用对象的组合/聚合,而不是继承来达到复用的目的。这样可以减少类之间的耦合,提高系统的灵活性。 5. 迪米特法则(Law of Demeter):一个...
在《JAVA与模式读书笔记》中,我们探讨的是Java编程语言与设计模式的结合应用,这对于深入理解面向对象编程和提升软件开发能力至关重要。设计模式是软件工程中的最佳实践,它们是解决常见问题的模板,可以提高代码的...
2. 结构型模式:包括适配器模式(Adapter)、桥接模式(Bridge)、装饰模式(Decorator)、组合模式(Composite)、外观模式(Facade)、享元模式(Flyweight)和代理模式(Proxy)。它们处理对象之间的关系,如组合...
抽象工厂模式同样遵循“开-闭”原则,提倡多用对象组合,少用继承,并且针对抽象编程。 建造者模式,又称为生成器模式,它将复杂对象的构建与其表示分离,使得相同的构建过程可以创建不同的表示。在手机套餐的例子...
这两个引脚的状态组合定义了STM32上电或复位后的启动位置。具体来说: - 当BOOT0为低电平(0)且BOOT1任意状态时,STM32将从内置的闪存启动。 - 当BOOT0为高电平(1)且BOOT1为低电平时,STM32将从系统存储器...
STL源码剖析读书笔记 STL(Standard Template Library)的源码剖析读书笔记是对经典著作的总结,涵盖了STL的六大组件、空间分配器、迭代器、仿函式、适配器和容器等知识点。 1. 六大组件 STL提供六大组件,彼此...
开发者可以利用这些组件组合出各种复杂的布局。 3. **事件处理**:Android使用监听器模式处理用户事件,如点击事件、滑动事件等。开发者可以通过实现或继承特定的接口,如OnClickListener、OnTouchListener,来注册...
根据提供的文件信息,可以看出这是一份关于Python编程的学习笔记,主要涵盖了Python的基础知识、特性、用法以及一些高级主题如异常处理、文件操作等。下面将对这些知识点进行详细的整理和解释。 ### 1. Python基础 ...
《神经网络读书笔记》 神经网络是现代计算机科学中的重要组成部分,它模仿生物神经系统的结构和功能,以解决复杂的问题。神经网络的基础在于其由大量简单的处理单元——神经元构成,形成大规模并行分布式处理器。...
综上所述,这个基于Spring Boot的学生读书笔记共享系统是一个典型的B/S架构应用,采用了Java语言、Spring Boot框架等技术栈进行开发。通过详细的需求分析、系统设计、编码实现以及测试部署等步骤,最终实现了系统的...
本教程读书笔记主要涵盖了Oracle的基础知识,适合初学者入门。以下是对笔记内容的详细解释: 1. **表的命名和访问**: - 表的全名由`用户名.表名`组成,访问当前用户的表时可以省略用户名,但访问其他用户下的表需...
《数据挖掘》读书笔记主要涵盖了数据可视化、建模方法、数据挖掘技术和预测分析的应用。作者Philipp K. Janer凭借其在物理学和软件工程领域的深厚背景,为读者提供了丰富的数据分析和数学建模知识。 在全书中,作者...
下面将详细讨论在标题"设计模式Golang实现-《研磨设计模式》读书笔记"中所涵盖的创建型模式、结构型模式和行为型模式。 1. 创建型模式: - 单例模式:确保一个类只有一个实例,并提供一个全局访问点。在Go中,...
感知器是神经网络的一种简单形式,由线性组合器和硬限幅器组成,能将输入分为两类。感知器收敛定理证明了在适当条件下,感知器可以学习到将输入正确分类的权值。感知器的训练通常涉及迭代算法,以逐步优化权重。 ...
通过创新,旧的经济模式被打破,新的商业模式和生产方式得以诞生,这是资本主义经济不断进步的关键动力。 总结来说,熊彼特的创新理论强调了创新在经济发展中的核心地位,它不仅推动了经济增长,而且带来了经济结构...
【传智播客SSH+SSM五大框架笔记】 在IT行业中,SSH(Struts2、Spring、Hibernate)和SSM(Spring、SpringMVC、MyBatis)是两种常见的Java Web开发框架组合,广泛应用于企业级应用开发。这些框架协同工作,能够帮助...
端口聚合协议(Port Aggregation Protocol, PAGP)和链路聚合控制协议(Link Aggregation Control Protocol, LACP)是用于组合多个物理接口形成逻辑上的单一高带宽通道的技术,增加链路的带宽并提高可靠性。...
1. 合理分组,优化组合。按照“组间同质,组内异质,优势互补,力量均衡”的原则,考虑学生的能力、性别等因素进行动态分组,确保每个小组内部既有互补性,又有竞争性。 2. 选择合适的内容和时机。合作学习应针对...