Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 再談設計模式

再談設計模式

編輯:關於Android編程

子曰:設計模式這東西,沒有好壞之分,只有合適於不合適   天去面試很有意思,技術考官指著最後一道二選一的編程題說,這是昨天晚上專門為你新加的.當時我聽後倍感慚愧. 雖然當時在紙上把大概思路和設計說了下.為了感謝主考官的重視程度.我再電腦上把這個設計敲出來實現出來. 題目大概是這個意思: 一個咖啡店賣好幾種咖啡:摩卡,布列夫,拿鐵等等 咖啡有很多搭配:方糖,鮮牛奶,奶油,鹽等. 試設計計算出咖啡(+搭配)的單價模型.   下面來談談我的想法   一:虛基類 Coffee 首先 我抽象出了一個虛基類 Coffee, 什麼摩卡 布列夫 拿鐵都繼承這個類   這個類包含什麼呢 { . 咖啡的單價(不含 方糖 奶等 調味料) —>price . 一個存放調味料的容器 —>ecoratorRelishChain . 一個可以得到總價的方法 —> getTotalPrices }   下面是代碼   基類咖啡.h    //abstract 咖啡基類  @class DecoratorChain;    @interface  Coffee: NSObject  @property ( nonatomic,strong ) DecoratorChain *ecoratorRelishChain;//用來存儲 奶 方糖 等等的調料 可以把它想象成一個調味盒   @property ( nonatomic,strong ) NSDecimalNumber *price;//單價 不含配料    -(NSDecimalNumber *) getTotalPrices;//得到總價    @end 基類咖啡.m   @interface Coffee() @property(nonatomic,strong) NSString * _coffeeName; @end   @implementation Coffee   @synthesize _coffeeName,price,ecoratorRelishChain; - (id)init {     self = [super init];     if (self) {         _coffeeName=@"咖啡名稱";         price = [[NSDecimalNumber alloc] initWithString:@"20"];     }     return self; }   -(NSDecimalNumber *)getTotalPrices {       return [self.price decimalNumberByAdding: [ecoratorRelishChain getCountPrice]]; }   @end 二: 虛基類 EcoratorRelish EcoratorRelish 是 方糖 奶油 牛奶 鹽 等等的抽象類 這個繼承在button 點擊的時候 可以自動將自己加入到chain (調料盤中)   這個類包含什麼呢 { . 自身的單價 —>price . 可以修改價錢的策略 —> configPrivilege }   方糖 等抽象出來的基類EcoratorRelish.h   @interface  EcoratorRelish: UIButton @property(nonatomic,strong)  NSDecimalNumber *price;//單價  //Overload -(void)configPrivilege;//可以配置優惠策略 -(DecoratorChain *)getComponentCoffee; @end EcoratorRelish.m   @implementation  EcoratorRelish @synthesize  price;   - (id)init {     self = [super init];     if (self) {         [self addTarget:self action:@selector(addDecoratorChain) forControlEvents:UIControlEventTouchUpInside];     }     return self; } //Overload -(void)configPrivilege {     //可以配置優惠策略  }   //獲取當前的輔料坐在的ViewController - (UIViewController *)getViewController {     Class vcc = [UIViewController class];     UIResponder *responder = self;     while ((responder = [responder nextResponder]))         if ([responder isKindOfClass: vcc])             return (UIViewController *)responder;     return nil; }   //獲取要裝飾的咖啡的調味盒(chain) -(DecoratorChain *)getEcoratorRelishChain {    return  [self getViewController].coffee.ecoratorRelishChain; }   //將自己加到咖啡的調味盒(chain) -(void)addDecoratorChain {     [[self getEcoratorRelishChain] addDecoratorRelish:self]; }   @end 三: 調料盒 DecoratorChain DecoratorChain.h   //用於保存配料的chain @interface  DecoratorChain: NSMutableArray -(void)addDecoratorRelish:(EcoratorRelish*)ecoratorRelish; @end DecoratorChain.m   @interface DecoratorChain() @property(nonatomic,strong) NSDecimalNumber * _countPrice; @end   @implementation DecoratorChain @synthesize _countPrice;   - (id)init {     self = [super init];     if (self) {         _countPrice = [[NSDecimalNumber alloc]init];     }     return self; }   -(void)addDecoratorRelish:(EcoratorRelish*)ecoratorRelish {     [self addObject:ecoratorRelish]; }   //得到當前所有chain 裡面的總價 -(NSDecimalNumber*)getCountPrice {     for (EcoratorRelish *tmp  in self ) {         [_countPrice decimalNumberByAdding:tmp.price];     }     return _countPrice; }   @end 下面的實現代碼大家應該都會寫了吧. 其實回頭看下 中間應用到的設計模式 最明顯的是 裝飾 和 組合 策略  
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved