目录
组合模式
使用组合模式,把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。
这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。
设计代码如下:
import java.util.ArrayList;
import java.util.List;
class Menu{
String name;
private List<Menu> Inmenu;
private List<Food> Infood;
Menu(String name){
this.name = name;
Inmenu = new ArrayList<Menu>();
Infood = new ArrayList<Food>();
}
public void addmenu(Menu m) {
Inmenu.add(m);
}
public void addfood(Food f) {
Infood.add(f);
}
public List<Menu> getMenu(){
return Inmenu;
}
public List<Food> getFood(){
return Infood;
}
}
class Food{
String name;
Food(String name){
this.name = name;
}
}
public class Composite {
public static void main(String[] args) {
Menu allMenu = new Menu("所有菜单");
Menu jianbMenu = new Menu("煎饼屋菜单");
Menu restMenu = new Menu("餐厅菜单");
Menu cofeMenu = new Menu("咖啡厅菜单");
allMenu.addmenu(jianbMenu);
allMenu.addmenu(restMenu);
allMenu.addmenu(cofeMenu);
Menu desertMenu = new Menu("甜点菜单");
restMenu.addmenu(desertMenu);
for(int m=1;m<=5;m++) {
jianbMenu.addfood(new Food("菜式"+m));
}
for(int n=1;n<=5;n++) {
restMenu.addfood(new Food("菜式"+n));
}
for(int y=1;y<=5;y++) {
desertMenu.addfood(new Food("菜式"+y));
}
for(int t=1;t<=5;t++) {
cofeMenu.addfood(new Food("菜式"+t));
}
System.out.println("输出菜单及其中的菜品:");
for(Menu m : allMenu.getMenu()) {
System.out.println(m.name+":");
for(Food f : m.getFood()) {
System.out.println(f.name);
}
for(Menu m1 : m.getMenu()) {
System.out.println(m1.name);
for(Food f1 : m.getFood()) {
System.out.println(f1.name);
}
}
}
}
}
运行结果:
输出菜单及其中的菜品:
煎饼屋菜单:
菜式1
菜式2
菜式3
菜式4
菜式5
餐厅菜单:
菜式1
菜式2
菜式3
菜式4
菜式5
甜点菜单
菜式1
菜式2
菜式3
菜式4
菜式5
咖啡厅菜单:
菜式1
菜式2
菜式3
菜式4
菜式5
单例模式
单例模式:单例模式是确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
单例模式的本质:
1.单例是一种保证对象只有一个的设计模式。
2.单例的本质在于共享。
3.单例和全局变量都是为了共享,但只有单例才能保证对象只有一个。
4.单例不一定是只有一个的。
(单线程)
class TaskManager
{
private static TaskManager[] tm = new TaskManager[3]; //创建容量为3的对象数组
private TaskManager() {}; //初始化窗口
public static TaskManager getInstance(){ //只能通过调用静态方法创建对象
for(int i = 0;i<3;i++) {
if(tm[i]==null) {
System.out.println("创建第"+(i+1)+"个对象");
tm[i] = new TaskManager();
return tm[i];
}
}
System.out.println("无法创建!");
return null;
}
}
public class OneExample {
public static void main(String[] argc) {
for(int i=0;i<4;i++) {
TaskManager.getInstance();
}
}
}
代码执行结果如下:
创建第1个对象
创建第2个对象
创建第3个对象
无法创建!