手机--装饰者模式

 

    /* 
     * 装饰者
     * 装饰者与被装饰对象有相同的父类
     * 装饰者内包含被装饰者对象的引用
     * 
     * 组合替代继承来扩展对象行为,运行时根据需求动态扩展
     * 扩展开放,修改关闭。
     * */

    public class Phone { }

    public class IPhone : Phone
    {
        public IPhone() { Console.WriteLine("IPhone"); }
    }
    public class VIVO : Phone
    {
        public VIVO() { Console.WriteLine("VIVO"); }
    }

    public abstract class Decorator : Phone
    {
        public Decorator(Phone phone) { Decorate(); }
        public abstract void Decorate();
    }
    public class Pack : Decorator
    {
        public Pack(Phone phone) : base(phone) { }
        public override void Decorate() { Console.WriteLine("Pack"); }
    }
    public class Film : Decorator
    {
        public Film(Phone phone) : base(phone) { }
        public override void Decorate() { Console.WriteLine("Film"); }
    }

    static void Main(string[] args)
    {
        IPhone iphone = new IPhone();
        Pack packIphone = new Pack(iphone);
        Film filmIphone = new Film(iphone);
        Console.WriteLine("========================");
        Film filmVivo = new Film(new Pack(new VIVO()));
        Console.ReadLine();
    }

 

转载于:https://www.cnblogs.com/HelloUnity/p/5741003.html

### 策略模式在前端开发中的实现及应用场景 策略模式定义了一系列算法,并将每个算法封装起来,使它们可以互换。这种模式让算法独立于使用它的客户端而变化。 #### 实现方式 以下是策略模式的一个简单实现: ```javascript // 定义不同的策略函数 const strategies = { add(a, b) { return a + b; }, subtract(a, b) { return a - b; }, multiply(a, b) { return a * b; } }; // 上下文对象,用于执行特定的策略 function calculate(strategyName, a, b) { const strategy = strategies[strategyName]; if (typeof strategy !== 'function') { throw new Error('Invalid Strategy'); } return strategy(a, b); } console.log(calculate('add', 10, 5)); // 输出 15 console.log(calculate('subtract', 10, 5)); // 输出 5 console.log(calculate('multiply', 10, 5)); // 输出 50 ``` 此代码展示了如何通过传递不同名称来调用不同的计算方法[^4]。 #### 应用场景 - **表单验证**:可以根据输入字段的不同类型(如邮箱、手机号码),动态切换不同的验证逻辑。 - **支付方式选择**:用户可以选择不同的支付方式(信用卡、PayPal等),每种方式对应一种具体的处理逻辑[^3]。 --- ### 装饰模式在前端开发中的实现及应用场景 装饰模式允许向一个现有的对象添加新的功能,而不改变其结构。这种方式提供了灵活的选择,在不修改原类文件的情况下,动态地扩展类的功能。 #### 实现方式 下面是一个简单的装饰模式例子: ```javascript // 原始组件 class Button { render() { console.log('Rendering button...'); } onClick() {} } // 装饰器 class LoggingButton extends Button { constructor(button) { super(); this.button = button; } render() { this.button.render(); // 执行原始行为 console.log('Logging the action...'); // 添加新行为 } onClick() { console.log('Click event logged.'); this.button.onClick(); // 可选地继续原有行为 } } // 使用装饰器 let originalButton = new Button(); originalButton.render(); let loggingButton = new LoggingButton(originalButton); loggingButton.render(); // 输出额外的日志信息 loggingButton.onClick(); // 处理点击事件并记录日志 ``` 这段代码展示了一个按钮被装饰的过程,增加了日志记录功能[^2]。 #### 应用场景 - **UI 组件增强**:可以在现有 UI 组件上增加额外的行为或属性,比如给按钮加日志记录或者动画效果。 - **性能监控工具**:可以通过装饰网络请求或其他耗时操作的方法,自动加入时间测量和错误捕获机制。 --- ### 总结 两种模式各有特点,适用于不同的需求。策略模式适合解决多变的业务逻辑问题;装饰模式则更适合在保持已有接口不变的前提下,为对象动态附加职责。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值