以喝水为例,代理模式就是有一个间接对象来代替你执行喝水这个操作,你说你可以喝那不算,我说你需要满足年龄大于18这个条件才能喝,那我就是这个间接对象。

// 代理模式
public abstract class CanDrink{
    public func drink(): Unit
}

public class Drinker <: CanDrink{
    var age: Int16
    public Drinker(age: Int16){
        this.age = age
    }

    // 自己喝,无条件
    public func drink(){
        println("喝水")
    }
}

public class DrinkerInBar <: CanDrink{
    var drinker: Drinker
    public DrinkerInBar(drinker: Drinker){
        this.drinker = drinker
    }

    // 在水吧,年龄大于18才能喝
    public func drink(){
        println("来到水吧")
        if(drinker.age > 18){
            drinker.drink()
        }
        else {
            println("未成年不可以喝水")
        }
    }
}

Drinker和它的代理DrinkerInBar都继承CanDrink,对抽象方法drink()进行相应的实现。

    // 张三是个17岁的水客
    var zhangsan: Drinker = Drinker(17)
    // 张三自己喝,OK
    zhangsan.drink()
    // 张三去水吧,登记为zs
    var zs: DrinkerInBar = DrinkerInBar(zhangsan)
    // 张三不能在水吧喝水因为水吧有规定
    zs.drink()

 

DrinkerInBar的代理加强了对张三喝水行为的控制 


 

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐