装饰模式-定义
动态地给一个对象添加一些额外的职责
装饰模式-场景
需要透明且动态地扩展类的功能时
装饰模式-角色划分
角色一:抽象组件
角色二:具体组件
角色三:抽象装饰者
角色四:具体装饰者
装饰模式-案例分析
Decorator
案例:妹子手机壳?iPhoneX->9688
角色一:抽象组件->MobilePhone(手机)
//
// MobilePhone.swift
// Dream_20180727_Decorator
//
// Created by Dream on 2018/7/27.
// Copyright © 2018年 Tz. All rights reserved.
//
import Foundation
protocol MobilePhone {
func shell()
}
角色二:具体组件->iPhoneX
//
// IPhoneX.swift
// Dream_20180727_Decorator
//
// Created by Dream on 2018/7/27.
// Copyright © 2018年 Tz. All rights reserved.
//
import UIKit
//具体组件->苹果手机
class IPhoneX: MobilePhone {
func shell() {
print("苹果手机")
}
}
角色三:抽象装饰者->MobilePhoneShell
//
// MobilePhoneShell.swift
// Dream_20180727_Decorator
//
// Created by Dream on 2018/7/27.
// Copyright © 2018年 Tz. All rights reserved.
//
import UIKit
//抽象装饰者
//特点一:继承(实现)抽象组件
//特点二:持有抽象组件引用
class MobilePhoneShell: MobilePhone {
private var mobile:MobilePhone
init(mobile:MobilePhone) {
self.mobile = mobile
}
func shell() {
self.mobile.shell()
}
}
角色四:具体装饰者
//
// GoodShell.swift
// Dream_20180727_Decorator
//
// Created by Dream on 2018/7/27.
// Copyright © 2018年 Tz. All rights reserved.
//
import UIKit
//具体装饰者->好的手机壳
class GoodShell: MobilePhoneShell {
override init(mobile: MobilePhone) {
super.init(mobile: mobile)
}
func wearproof(){
print("耐磨功能")
}
func waterproof(){
print("防水功能")
}
func dustproof(){
print("防尘功能");
}
}
质量好的手机壳:耐磨、防水、防尘…(300)
耐磨:wearproof()
防水:waterproof()
防尘:dustproof()
GoodShell
质量差的手机壳:耐磨(50)
耐磨:wearproof()
//
// PoorShell.swift
// Dream_20180727_Decorator
//
// Created by Dream on 2018/7/27.
// Copyright © 2018年 Tz. All rights reserved.
//
import UIKit
//具体装饰者->好的手机壳
class PoorShell: MobilePhoneShell {
override init(mobile: MobilePhone) {
super.init(mobile: mobile)
}
func wearproof(){
print("耐磨功能")
}
}
调用
//
// ViewController.swift
// Dream_20180727_Decorator
//
// Created by Dream on 2018/7/27.
// Copyright © 2018年 Tz. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let phone = IPhoneX()
phone.shell()
let good = GoodShell(mobile: phone)
good.shell()
good.dustproof()
good.waterproof()
good.wearproof()
let poor = PoorShell(mobile: phone)
poor.shell()
poor.wearproof()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
网友评论