成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

【設計模式】通過在蘋果官網購買iPhone配件了解裝飾器模式

開發 前端
裝飾器主要是通過組合的模式,對類內容進行擴展,而不是通過繼承的方式,特別是在Java只能單繼承的情況,行之有效。

背景

一個iPhone,可以套上保護殼(ConcDecorator A),也可以再套上無線充(ConcDecorator B),得到最后的效果(execute)。

蘋果無需發布新的型號(繼承),我們簡單地通過裝飾(組合)就可以得到想要的最終產品。

模式定義

Attach additional responsibilities to an object dynamically keeping the same interface. Decorators provide a flexible alternative to subclassing for extending functionality.

為動態保持相同接口的對象附加額外的職責。裝飾器為擴展功能提供了一種靈活的選擇,而不是子類化。

可以看到,是十分符合我們的需求的,每一個裝飾品如保護殼、無線充,就是一個個可以嵌套的裝飾器。

https://refactoringguru.cn/design-patterns/decorator

模式實現

1.定義iPhone接口

主要定義了iPhone模板的說明接口方法getDesc,后續以這個方法為核心,展開嵌套。

package com.example.designpattern.decorator;

/**
 * 手機
 *
 * @author hongcunlin
 */
public interface Phone {
    /**
     * 介紹
     *
     * @return 介紹內容
     */
    String getDesc();
}

2.實現iPhone接口

簡單試下getDesc的方法,目前是一個裸機的iPhone。

package com.example.designpattern.decorator.impl;

import com.example.designpattern.decorator.Phone;

/**
 * 蘋果手機iPhone 14 Pro Max
 *
 * @author hongcunlin
 */
public class Iphone implements Phone {
    @Override
    public String getDesc() {
        return "iPhone";
    }
}

3.定義iPhone裝飾器抽象類

裝飾器的超類,里邊存放iPhone屬性,圍繞它進行嵌套。

package com.example.designpattern.decorator.impl.decorator;

import com.example.designpattern.decorator.Phone;

/**
 * 手機裝飾器
 *
 * @author hongcunlin
 */
public abstract class IphoneDecorator implements Phone {
    /**
     * 手機(抽象類存在的意義,否則就使用接口了)
     */
    protected Phone phone;

    /**
     * 構造方法
     *
     * @param phone 手機
     */
    IphoneDecorator(Phone phone) {
        this.phone = phone;
    }
}

4.1.實現iPhone裝飾器之保護殼

嵌套一

package com.example.designpattern.decorator.impl.decorator;

import com.example.designpattern.decorator.Phone;

/**
 * iPhone保護殼
 *
 * @author hongcunlin
 */
public class IphoneCaseDecorator extends IphoneDecorator {
    /**
     * 構造方法
     *
     * @param phone 手機
     */
    public IphoneCaseDecorator(Phone phone) {
        super(phone);
    }

    @Override
    public String getDesc() {
        return "帶保護殼的" + phone.getDesc();
    }
}

4.2.實現iPhone裝飾器之無線充

嵌套二

package com.example.designpattern.decorator.impl.decorator;

import com.example.designpattern.decorator.Phone;

/**
 * iPhone無線充
 *
 * @author hongcunlin
 */
public class IphoneChargerDecorator extends IphoneDecorator {
    /**
     * 構造方法
     *
     * @param phone 手機
     */
    public IphoneChargerDecorator(Phone phone) {
        super(phone);
    }

    @Override
    public String getDesc() {
        return "帶無線充的" + phone.getDesc();
    }
}

5.測試

這里我們先初始化一個iPhone,接著帶上保護殼看看效果,最后再帶上無線充看看效果。

package com.example.designpattern.decorator;

import com.example.designpattern.decorator.impl.Iphone;
import com.example.designpattern.decorator.impl.decorator.IphoneCaseDecorator;
import com.example.designpattern.decorator.impl.decorator.IphoneChargerDecorator;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class DesignPatternTest {
    @Test
    public void test() {
        // 常規iPhone
        Phone iphone = new Iphone();
        System.out.println(iphone.getDesc());

        // 帶保護殼的iPhone
        iphone = new IphoneCaseDecorator(iphone);
        System.out.println(iphone.getDesc());

        // 帶無線充的帶保護殼的iPhone
        iphone = new IphoneChargerDecorator(iphone);
        System.out.println(iphone.getDesc());
    }
}

可以看到,隨著裝飾器的層層嵌套,iPhone的模樣越來越復雜,是符合我們的預期的。

最后

裝飾器主要是通過組合的模式,對類內容進行擴展,而不是通過繼承的方式,特別是在Java只能單繼承的情況,行之有效。

后面有空接著閑聊23種設計模式中的其他種。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2023-09-04 13:14:00

裝飾器設計模式

2023-12-13 13:28:16

裝飾器模式Python設計模式

2023-10-07 00:17:06

AirDrop中介者模式

2022-01-19 08:21:12

設計裝飾器模式

2024-02-23 12:11:53

裝飾器模式對象

2023-10-07 00:14:53

2020-12-01 07:16:05

重學設計模式

2022-03-25 11:01:28

Golang裝飾模式Go 語言

2023-09-26 00:27:07

設計模式鏈接

2020-08-28 10:11:33

蘋果配件手機

2024-04-10 12:27:43

Python設計模式開發

2011-06-02 18:02:50

iPhone MVC

2020-11-09 08:20:33

解釋器模式

2023-05-15 08:51:46

解釋器模式定義

2009-11-18 13:20:07

PHP設計模式

2022-09-14 08:16:48

裝飾器模式對象

2021-06-03 09:18:25

裝飾器模式包裝

2012-04-24 23:40:17

蘋果

2011-12-30 21:28:24

iPad

2021-06-22 15:27:13

設計模式迭代器模式Java
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美精品a∨在线观看不卡 欧美日韩中文字幕在线播放 | 巨大荫蒂视频欧美另类大 | 成人高清在线视频 | 夜夜草导航 | 亚洲精品视频免费 | 久久69精品久久久久久国产越南 | 在线播放第一页 | 亚洲精品乱码久久久久久按摩 | 久久久久久久97 | 91精品国产色综合久久不卡蜜臀 | 黑人巨大精品欧美一区二区免费 | 日本精品久久久久久久 | 女人精96xxx免费网站p | 国产高清av免费观看 | 国产精品免费一区二区三区四区 | 亚洲成人精品久久 | 黄色片在线 | 国产免费一区二区三区 | 日韩免费视频一区二区 | 久久国 | 最新国产精品精品视频 | 欧美国产精品 | 国产精品久久久久久久久免费桃花 | 一级免费a | av在线电影网 | 激情a | 久久久91精品国产一区二区三区 | 国产分类视频 | 中文字幕一区二区三区在线观看 | h网站在线观看 | 在线色网站 | 国产一区二区免费在线 | 国产成人精品视频在线观看 | av在线成人 | 国产精品免费看 | 国产成人99久久亚洲综合精品 | 欧美精品在线一区二区三区 | 福利视频一区 | 色精品| 国产乱码精品1区2区3区 | 欧美1区 |