IOS开发之电子菜单的设计与实现(继承、封装、多态)

//
//  main.m
//  电子菜单
//

#import <Foundation/Foundation.h>
#import "Food.h"
#import "CoolFood.h"
#import "HotFood.h"
#import "MainFood.h"
#import "Drinks.h"
#import "BillBoard.h"

int main(int argc, const char * argv[])
{

    Food * food = [[Food alloc]init];
    [food showInformation:@"红烧肉" andShowMaterial:@"猪肉 葱姜蒜"andShowNurition:@"钙铁锌新维生素"];
    NSLog(@"%@",food);
    @autoreleasepool {

        // insert code here...
        NSLog(@"Hello, World!");

    }
    return 0;
}
//
//  Menu.h
//  电子菜单
//

#import <Foundation/Foundation.h>
#import "Food.h"
#import "CoolFood.h"
#import "HotFood.h"
#import "MainFood.h"
#import "Drinks.h"
#import "BillBoard.h"

@interface Menu : NSObject
{
    /**用来记录点餐数量*/
    int _recordOfFood;

    /**用来记录点餐状态*/
    BOOL _statusOfFood;

    /**用来记录食品价格*/
    int _priceOfFood;
}

-(void)showInformation:(Food *)food;

@end
//
//  Menu.m
//  电子菜单
//

#import "Menu.h"

@implementation Menu
-(void)showInformation:(Food *)food
{
    if ([food isKindOfClass:[CoolFood class]]) {
        CoolFood * cool = (CoolFood *)food;
        [cool show];
    }
    else if([food isKindOfClass:[HotFood class]])
    {
        HotFood * hot = (HotFood *)food;
        [hot show];
    }
    else if([food isKindOfClass:[MainFood class]])
    {
        MainFood * mainFood = (MainFood *)food;
        [mainFood show];
    }
    else
    {
        Drinks * drinks = (Drinks *)food;
        [drinks show];
    }
}
@end
//  Food.h
//  电子菜单
//
/*
    可以使用继承
    电子菜单的实现
    1.食品类
 */
#import <Foundation/Foundation.h>

@interface Food : NSObject
{
    /**用来记录菜品名称*/
    NSString * _foodName;

    /**组成材料*/
    NSString * _material;

    /**营养信息*/
    NSString * _nutrition;

    /**用来记录食品种类*/
    NSString * _kindOfFood;
}
@property NSString * foodName;
@property NSString * material;
@property NSString * nutrition;
@property NSString * kindOfFood;

-(void)showInformation:(NSString*)foodName andShowMaterial:(NSString *)material andShowNurition:(NSString *)nutrition;
@end
//
//  Food.m
//  电子菜单
//

#import "Food.h"

@implementation Food
@synthesize foodName = _foodName;
@synthesize material = _material;
@synthesize nutrition = _nutrition;
@synthesize kindOfFood = _kindOfFood;

-(void)showInformation:(NSString*)foodName andShowMaterial:(NSString *)material andShowNurition:(NSString *)nutrition;
{
    _foodName = foodName;
    _material = material;
    _nutrition = nutrition;
    NSLog(@"%@ %@ %@",_foodName,_material,_nutrition);
}
-(NSString *)description
{
    return [NSString stringWithFormat:@"食品名称:%@食材:%@ 营养物质:%@",_foodName,_material,_nutrition];
}
@end
#import "Food.h"

@interface CoolFood : Food
-(void)show;
@end
#import "CoolFood.h"

@implementation CoolFood
-(void)show
{
    NSLog(@"您选择的是凉菜");
}
@end
#import "Food.h"

@interface HotFood : Food
-(void)show;
@end
#import "HotFood.h"

@implementation HotFood
-(void)show
{
    NSLog(@"您选择的是热菜");
}
@end
#import "Food.h"

@interface MainFood : Food
-(void)show;
@end
#import "MainFood.h"

@implementation MainFood
-(void)show
{
    NSLog(@"您选择的是热菜");
}
@end
#import "Food.h"

@interface Drinks : Food
-(void)show;
@end
#import "Drinks.h"

@implementation Drinks
-(void)show
{
    NSLog(@"您选择的是酒水");
}
@end
#import <Foundation/Foundation.h>

@interface BillBoard : NSObject
{
    /**排名*/
    int _rank;

    /**评论*/
    NSString * _comment;
}
-(id)init;
-(void)showRank:(int)rank;
@end
#import "BillBoard.h"

@implementation BillBoard
-(id)init
{
    self = [super init];
    if (self!=nil) {
        _rank = 0;
    }
    return self;
}
-(void)showRank:(int)rank
{
    _rank += rank;
    NSLog(@"您的排名是%d",_rank);
}

@end

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-08 11:49:56

IOS开发之电子菜单的设计与实现(继承、封装、多态)的相关文章

ios开发之电子优惠券的设计与实现

// // main.m // 电子优惠券 // #import <Foundation/Foundation.h> #import "Discount.h" #import "Food.h" int main(int argc, const char * argv[]) { Discount * dis = [[Discount alloc]init]; [dis showInformation:20 andDiscountTime:@"本优

iOS开发网络篇—文件下载(五&#183;下载功能的封装)

iOS开发网络篇—文件下载(五·下载功能的封装) 一.简单说明 在前面几篇文章介绍下载代码的基础上,此文分析对下载功能进行封装. 通过之前的代码,我们发现仅仅是下载一个文件就需要写很长的代码,那么如果要下载多个文件,就需要写多份代码.在这里,我们把下载一个文件的代码进行封装.控制器只需要知道,下载哪个文件,下载到哪个路径就可以了. 在对下载的功能进行封装后,添加一个文件下载器,一个文件下载器只下载一个文件,封装后如果要下载多个文件的话,那么只需要创建多个文件下载器对象就可以进行控制和下载了. 二

ios开发-UI基础-应用管理(单纯界面)改进4-xib封装

[注意]转载请注明出处:吃唐僧肉的小悟空http://www.cnblogs.com/hukezhu/ 上篇文章结尾介绍了一下为什么要对xib进行封装,这里不再赘述. 大体整理了一下封装的思路(我自己的想法,可能不是很清晰): 为了扩展,将xib的代码封装,创建一个类,来描述xib >在新建的.m文件中,新建一个类扩展(类似于viewController) >在新建的.h文件中,加入一个模型的属性(@class) >在新建的.m文件中,重写模型的set方法(在.h文件中已经加入了,自动生

文顶顶iOS开发博客链接整理及部分项目源代码下载

文顶顶iOS开发博客链接整理及部分项目源代码下载 网上的iOS开发的教程很多,但是像cnblogs博主文顶顶的博客这样内容图文并茂,代码齐全,示例经典,原理也有阐述,覆盖面宽广,自成系统的系列教程却很难找.如果你是初学者,在学习了斯坦福iOS7公开课和跟着文顶顶的博客做项目之后,最快只需要2个月时间,就基本可以独立完成iOS App的开发工作.有经验的开发者也可以在该博客中寻找代码片段进行学习借鉴,必有所收获. 在此也向@文顶顶 表示严重感谢! 由于文顶顶博客博文繁多,每次找文章需要频繁的翻页,

iOS开发 -文件下载(5 下载功能的封装)

iOS开发网络篇—文件下载(五·下载功能的封装) 一.简单说明 在前面几篇文章介绍下载代码的基础上,此文分析对下载功能进行封装. 通过之前的代码,我们发现仅仅是下载一个文件就需要写很长的代码,那么如果要下载多个文件,就需要写多份代码.在这里,我们把下载一个文件的代码进行封装.控制器只需要知道,下载哪个文件,下载到哪个路径就可以了. 在对下载的功能进行封装后,添加一个文件下载器,一个文件下载器只下载一个文件,封装后如果要下载多个文件的话,那么只需要创建多个文件下载器对象就可以进行控制和下载了. 二

100个iOS开发/设计面试题汇总

常见问题 你昨天/这周学习了什么? 你为什么热衷于软件开发? 你对哪一种控制系统比较熟悉? 是否参与过GitHub项目? 是否参与过GitHub或其他同类型网站的iOS开源项目? 请描述一下你的iOS应用开发流程. 是否熟知CocoaPods?它是什么?如何运行的? 请概括一下你对软件授权的理解,及其对软件开发的影响. 请概括一下你在构建iOS应用时的测试过程.iOS应用如何实现对其他语言.日期格式以及货币单位的支持? 请描述一下Instruments及其作用. 关于iOS技术 请解释一下Han

iOS开发&gt;学无止境 - 浅谈MVVM的架构设计与团队协作

李刚按:本文是青玉伏案写的一篇文章.相信大家对MVC耳熟能详,MVVM可能听说的相对少一些,这一篇文章将会想你阐述MVVM设计,还有团队协作的经验分享.如果你也觉得不错,就分享一下吧! demo:https://github.com/lizelu/MVVM 今天写这篇文章是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇文章的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦~). 由 于本人项目经验有限,关于架构设

iOS开发之浅谈MVVM的架构设计与团队协作

今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦~). 由于本人项目经验有限,关于架构设计方面的东西理解有限,我个人对MVVM的理解主要是借鉴于之前的用过的MVC的Web框架~在学校的时候用过ThinkPHP框架,和SSH框架,都是MVC的架构模式,今天MVVM与传统的MVC可谓是极为相似,也可以说是兄弟关系,也就是一家人了. 说道架构设计和团队

iOS开发项目篇—14点击标题按钮弹出菜单

iOS开发项目篇—14点击标题按钮弹出菜单 一.简单说明 (1)简单实现 点击标题按钮弹框,在箭头向上的时候,显示标题菜单 把ImageView添加到谁的身上?三角形的箭头在导航栏上,因此不能添加到tableview上. 分析图示: 有两个两种方法可以考虑: (1)添加到导航控制器上,因为导航栏是在导航控制器上的. (2)不用考虑控制器,直接添加到窗口上. 拿到窗口 (1)self.view.window这个属性谨慎使用,当开始加载的时候,为空 (2)获取主窗口  [UIApplication