10 changed files with 427 additions and 0 deletions
@ -0,0 +1,27 @@ |
|||||||
|
/* |
||||||
|
* Copyright (C) 2023 niushuai233 niushuai.cc |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package cc.niushuai.demo.designpattern.constructmodel.adapter; |
||||||
|
|
||||||
|
/** |
||||||
|
* 充电器接口 |
||||||
|
* |
||||||
|
* @author niushuai233 |
||||||
|
* @date 2024/1/5 15:55 |
||||||
|
* @since 0.0.1 |
||||||
|
*/ |
||||||
|
public class ChargeAdapter { |
||||||
|
} |
@ -0,0 +1,29 @@ |
|||||||
|
/* |
||||||
|
* Copyright (C) 2023 niushuai233 niushuai.cc |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package cc.niushuai.demo.designpattern.constructmodel.adapter.chargeinterface; |
||||||
|
|
||||||
|
/** |
||||||
|
* 接口类型 |
||||||
|
* |
||||||
|
* @author niushuai233 |
||||||
|
* @date 2024/1/5 16:06 |
||||||
|
* @since 0.0.1 |
||||||
|
*/ |
||||||
|
public enum ChargeInterfaceEnum { |
||||||
|
|
||||||
|
USB_A, USB_C, LIGHTING |
||||||
|
} |
@ -0,0 +1,33 @@ |
|||||||
|
/* |
||||||
|
* Copyright (C) 2023 niushuai233 niushuai.cc |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package cc.niushuai.demo.designpattern.constructmodel.adapter.chargeinterface; |
||||||
|
|
||||||
|
/** |
||||||
|
* 充电接口 |
||||||
|
* |
||||||
|
* @author niushuai233 |
||||||
|
* @date 2024/1/5 15:59 |
||||||
|
* @since 0.0.1 |
||||||
|
*/ |
||||||
|
public interface IChargeInterface { |
||||||
|
|
||||||
|
boolean supports(ChargeInterfaceEnum _interface); |
||||||
|
|
||||||
|
void pushIn(); |
||||||
|
|
||||||
|
void pullOut(); |
||||||
|
} |
@ -0,0 +1,49 @@ |
|||||||
|
/* |
||||||
|
* Copyright (C) 2023 niushuai233 niushuai.cc |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package cc.niushuai.demo.designpattern.constructmodel.adapter.chargeinterface; |
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
|
||||||
|
/** |
||||||
|
* 雷电接口 |
||||||
|
* |
||||||
|
* @author niushuai233 |
||||||
|
* @date 2024/1/5 16:04 |
||||||
|
* @since 0.0.1 |
||||||
|
*/ |
||||||
|
@Slf4j |
||||||
|
public class LightingChargeInterface implements IChargeInterface { |
||||||
|
|
||||||
|
private ChargeInterfaceEnum _INTERFACE = ChargeInterfaceEnum.LIGHTING; |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean supports(ChargeInterfaceEnum _interface) { |
||||||
|
boolean equals = _INTERFACE.equals(_interface); |
||||||
|
log.info("chargeInterface: {} supports {}", _interface, equals); |
||||||
|
return equals; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void pushIn() { |
||||||
|
log.info("lighting 插入"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void pullOut() { |
||||||
|
log.info("lighting 拔出"); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,49 @@ |
|||||||
|
/* |
||||||
|
* Copyright (C) 2023 niushuai233 niushuai.cc |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package cc.niushuai.demo.designpattern.constructmodel.adapter.chargeinterface; |
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
|
||||||
|
/** |
||||||
|
* usb a接口 |
||||||
|
* |
||||||
|
* @author niushuai233 |
||||||
|
* @date 2024/1/5 16:01 |
||||||
|
* @since 0.0.1 |
||||||
|
*/ |
||||||
|
@Slf4j |
||||||
|
public class UsbAChargeInterface implements IChargeInterface { |
||||||
|
|
||||||
|
private ChargeInterfaceEnum _INTERFACE = ChargeInterfaceEnum.USB_A; |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean supports(ChargeInterfaceEnum _interface) { |
||||||
|
boolean equals = _INTERFACE.equals(_interface); |
||||||
|
log.info("期望: {} 实际: {} 可用: {}", _INTERFACE, _interface, equals); |
||||||
|
return equals; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void pushIn() { |
||||||
|
log.info("usb a 插入"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void pullOut() { |
||||||
|
log.info("usb a 拔出"); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,47 @@ |
|||||||
|
/* |
||||||
|
* Copyright (C) 2023 niushuai233 niushuai.cc |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package cc.niushuai.demo.designpattern.constructmodel.adapter.chargeinterface; |
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
|
||||||
|
/** |
||||||
|
* usb c接口 |
||||||
|
* |
||||||
|
* @author niushuai233 |
||||||
|
* @date 2024/1/5 16:02 |
||||||
|
* @since 0.0.1 |
||||||
|
*/ |
||||||
|
@Slf4j |
||||||
|
public class UsbCChargeInterface implements IChargeInterface { |
||||||
|
private ChargeInterfaceEnum _INTERFACE = ChargeInterfaceEnum.USB_C; |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean supports(ChargeInterfaceEnum _interface) { |
||||||
|
boolean equals = _INTERFACE.equals(_interface); |
||||||
|
log.info("chargeInterface: {} supports {}", _interface, equals); |
||||||
|
return equals; |
||||||
|
} |
||||||
|
@Override |
||||||
|
public void pushIn() { |
||||||
|
log.info("usb c 插入"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void pullOut() { |
||||||
|
log.info("usb c 拔出"); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,49 @@ |
|||||||
|
/* |
||||||
|
* Copyright (C) 2023 niushuai233 niushuai.cc |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package cc.niushuai.demo.designpattern.constructmodel.adapter.phone; |
||||||
|
|
||||||
|
import cc.niushuai.demo.designpattern.constructmodel.adapter.chargeinterface.ChargeInterfaceEnum; |
||||||
|
|
||||||
|
/** |
||||||
|
* 手机品牌以及支持的充电接口 |
||||||
|
* |
||||||
|
* @author niushuai233 |
||||||
|
* @date 2024/1/5 16:15 |
||||||
|
* @since 0.0.1 |
||||||
|
*/ |
||||||
|
public enum BrandEnum { |
||||||
|
OPPO("OPPO", ChargeInterfaceEnum.USB_A), |
||||||
|
XIAOMI("XIAOMI", ChargeInterfaceEnum.USB_C), |
||||||
|
IPHONE("IPHONE", ChargeInterfaceEnum.LIGHTING); |
||||||
|
|
||||||
|
private String name; |
||||||
|
private ChargeInterfaceEnum interfaceEnum; |
||||||
|
|
||||||
|
BrandEnum(String name, ChargeInterfaceEnum interfaceEnum) { |
||||||
|
this.name = name; |
||||||
|
this.interfaceEnum = interfaceEnum; |
||||||
|
} |
||||||
|
|
||||||
|
public String getName() { |
||||||
|
return name; |
||||||
|
} |
||||||
|
|
||||||
|
public ChargeInterfaceEnum getInterface() { |
||||||
|
return interfaceEnum; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,61 @@ |
|||||||
|
/* |
||||||
|
* Copyright (C) 2023 niushuai233 niushuai.cc |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package cc.niushuai.demo.designpattern.constructmodel.adapter.phone; |
||||||
|
|
||||||
|
import cc.niushuai.demo.designpattern.constructmodel.adapter.chargeinterface.IChargeInterface; |
||||||
|
import cn.hutool.core.util.RandomUtil; |
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
|
||||||
|
/** |
||||||
|
* phone interface
|
||||||
|
* |
||||||
|
* @author niushuai233 |
||||||
|
* @date 2024/1/5 16:19 |
||||||
|
* @since 0.0.1 |
||||||
|
*/ |
||||||
|
@Slf4j |
||||||
|
public class Phone { |
||||||
|
|
||||||
|
private boolean in; |
||||||
|
|
||||||
|
private BrandEnum brand; |
||||||
|
|
||||||
|
private IChargeInterface chargeInterface; |
||||||
|
|
||||||
|
public Phone(BrandEnum brand, IChargeInterface chargeInterface) { |
||||||
|
this.brand = brand; |
||||||
|
this.chargeInterface = chargeInterface; |
||||||
|
} |
||||||
|
|
||||||
|
public void pushIn() { |
||||||
|
log.info("{}手机插入充电器 准备充电", brand.getName()); |
||||||
|
if (!chargeInterface.supports(brand.getInterface())) { |
||||||
|
log.warn("接口不匹配, 请检查 需要: {}", brand.getInterface().name()); |
||||||
|
return; |
||||||
|
} |
||||||
|
chargeInterface.pushIn(); |
||||||
|
in = true; |
||||||
|
} |
||||||
|
|
||||||
|
public void pullOut() { |
||||||
|
if (!in) { |
||||||
|
return; |
||||||
|
} |
||||||
|
chargeInterface.pullOut(); |
||||||
|
log.info("{}手机拔出充电器 当前电量: {}%", brand.getName(), RandomUtil.randomInt(50, 100)); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,24 @@ |
|||||||
|
/* |
||||||
|
* Copyright (C) 2023 niushuai233 niushuai.cc |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
/** |
||||||
|
* 结构性模式 适配器 桥接 组合 装饰器 外观 代理 享元 |
||||||
|
* |
||||||
|
* @author niushuai233 |
||||||
|
* @date 2024/1/5 15:54 |
||||||
|
* @since 0.0.1 |
||||||
|
*/ |
||||||
|
package cc.niushuai.demo.designpattern.constructmodel; |
@ -0,0 +1,59 @@ |
|||||||
|
/* |
||||||
|
* Copyright (C) 2023 niushuai233 niushuai.cc |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package cc.niushuai.demo.designpattern.constructmodel.adapter; |
||||||
|
|
||||||
|
import cc.niushuai.demo.designpattern.constructmodel.adapter.chargeinterface.LightingChargeInterface; |
||||||
|
import cc.niushuai.demo.designpattern.constructmodel.adapter.chargeinterface.UsbAChargeInterface; |
||||||
|
import cc.niushuai.demo.designpattern.constructmodel.adapter.chargeinterface.UsbCChargeInterface; |
||||||
|
import cc.niushuai.demo.designpattern.constructmodel.adapter.phone.BrandEnum; |
||||||
|
import cc.niushuai.demo.designpattern.constructmodel.adapter.phone.Phone; |
||||||
|
import cn.hutool.core.thread.ThreadUtil; |
||||||
|
import org.junit.jupiter.api.Test; |
||||||
|
|
||||||
|
/** |
||||||
|
* phone test |
||||||
|
* |
||||||
|
* @author niushuai233 |
||||||
|
* @date 2024/1/5 16:31 |
||||||
|
* @since 0.0.1 |
||||||
|
*/ |
||||||
|
public class PhoneTest { |
||||||
|
|
||||||
|
@Test |
||||||
|
public void testPhone() { |
||||||
|
|
||||||
|
Phone xiaomi = new Phone(BrandEnum.XIAOMI, new UsbCChargeInterface()); |
||||||
|
xiaomi.pushIn(); |
||||||
|
ThreadUtil.sleep(1000); |
||||||
|
xiaomi.pullOut(); |
||||||
|
|
||||||
|
System.out.println(); |
||||||
|
|
||||||
|
Phone oppo = new Phone(BrandEnum.OPPO, new UsbCChargeInterface()); |
||||||
|
oppo.pushIn(); |
||||||
|
ThreadUtil.sleep(1000); |
||||||
|
oppo.pullOut(); |
||||||
|
|
||||||
|
System.out.println(); |
||||||
|
|
||||||
|
Phone iphone = new Phone(BrandEnum.IPHONE, new LightingChargeInterface()); |
||||||
|
iphone.pushIn(); |
||||||
|
ThreadUtil.sleep(1000); |
||||||
|
iphone.pullOut(); |
||||||
|
|
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue