组合模式 及 单例模式简单演示

组合模式 及 单例模式简单演示

目录

组合模式

使用组合模式,把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。
这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。

设计代码如下:

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个对象
无法创建!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值