装饰器设计模式-代码演示demo
程序员文章站
2022-03-15 09:54:03
代码演示:demo1:模拟扩音器,放大声音model实体:package com.charis.io.model;/** * 声音 实体类 * @author Charis */public class Voice { // 声音大小 private Integer size; public Voice(Integer size) { this.size = size; } public Integer getSize() {...
代码演示:
demo1:模拟扩音器,放大声音
model实体:
package com.charis.io.model;
/**
* 声音 实体类
* @author Charis
*/
public class Voice {
// 声音大小
private Integer size;
public Voice(Integer size) {
this.size = size;
}
public Integer getSize() {
return size;
}
public void setSize(Integer size) {
this.size = size;
}
}
dao接口:
package com.charis.io.dao;
/**
* @author Charis
*/
public interface ExplainDao {
// 声音分呗的说明
void say();
}
service业务层逻辑:
package com.charis.io.service;
import com.charis.io.dao.ExplainDao;
import com.charis.io.model.Voice;
/**
* 人的原声 业务
* @author Charis
*/
public class PersonService implements ExplainDao {
// 创建声音对象
Voice voice = new Voice(10);
@Override
public void say() {
System.out.println("人的原声为:"+ voice.getSize() + "分呗");
}
}
package com.charis.io.service;
import com.charis.io.dao.ExplainDao;
/**
* 声音 放大器业务
* @author Charis
*/
public class AmplifierService implements ExplainDao {
// 创建人物对象
private PersonService personService;
public AmplifierService(PersonService personService) {
this.personService = personService;
}
// 对人的原声音进行放大
@Override
public void say() {
System.out.println("人的声音放大为:" + personService.voice.getSize()*10 +"分呗");
}
}
controller控制器:
package com.charis.io.controller;
import com.charis.io.service.AmplifierService;
import com.charis.io.service.PersonService;
/**
* 装饰器设计模式
* 功能:模拟扩音器,放大声音
* @author Charis
*/
public class DecoratorTest1 {
public static void main(String[] args) {
// 1、人原声测试
PersonService personService = new PersonService();
personService.say();
System.out.println("--------------------------------------");
// 2、人放大后的声音测试
AmplifierService amplifierService = new AmplifierService(personService);
amplifierService.say();
}
}
输出结果:
demo2:模拟不同口味的咖啡价格
model实体类:
package com.charis.io2.model;
/**
* 饮料 实体类
* @author Charis
*/
public class Drink {
// 费用
private Double cost;
// 名字
private String name;
public Drink(String name) {
this.name = name;
}
public Drink(Double cost) {
this.cost = cost;
}
public Double getCost() {
return cost;
}
public void setCost(Double cost) {
this.cost = cost;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
dao接口:
package com.charis.io2.dao;
/**
* 抽象组件
*
* @author Charis
*/
public interface DrinkDao {
// 费用信息
public abstract double money();
// 说明信息
public abstract String state();
}
DAO接口impl实现类:
定义饮料对象:
package com.charis.io2.dao.impl;
import com.charis.io2.dao.DrinkDao;
import com.charis.io2.model.Drink;
/**
* 具体组件
* @author Charis
*/
public class CoffeeDao implements DrinkDao {
// 创建饮料对象
Drink drink = new Drink("原味咖啡");
Drink drink2 = new Drink(10.0);
// 费用信息
@Override
public double money() {
return drink2.getCost();
}
// 说明信息
@Override
public String state() {
return drink.getName();
}
}
装饰类:
package com.charis.io2.dao.impl;
import com.charis.io2.dao.DrinkDao;
/**
* 抽象装饰类
* @author Charis
*/
public abstract class DecorateDao implements DrinkDao {
//对象抽象组件的引用
private CoffeeDao coffeeDao;
public DecorateDao(CoffeeDao coffeeDao) {
this.coffeeDao = coffeeDao;
}
// 费用信息
@Override
public double money() {
return coffeeDao.money();
}
// 说明信息
@Override
public String state() {
return coffeeDao.state();
}
}
service业务层:
牛奶:
package com.charis.io2.service;
import com.charis.io2.dao.impl.CoffeeDao;
import com.charis.io2.dao.impl.DecorateDao;
/**
* 具体装饰类
* @author Charis
*/
public class MilkService extends DecorateDao {
public MilkService(CoffeeDao coffeeDao) {
super(coffeeDao);
}
// 费用信息
@Override
public double money() {
return super.money()*4;
}
// 说明信息
@Override
public String state() {
return super.state()+"加入了牛奶";
}
}
蜂蜜:
package com.charis.io2.service;
import com.charis.io2.dao.impl.CoffeeDao;
import com.charis.io2.dao.impl.DecorateDao;
/**
* 具体装饰类
* @author Charis
*/
public class SugerService extends DecorateDao {
public SugerService(CoffeeDao coffeeDao) {
super(coffeeDao);
}
// 费用信息
@Override
public double money() {
return super.money()*2;
}
// 说明信息
@Override
public String state() {
return super.state()+"加入了蜂蜜";
}
}
controller控制器:
package com.charis.io2.controller;
import com.charis.io2.dao.DrinkDao;
import com.charis.io2.dao.impl.CoffeeDao;
import com.charis.io2.service.MilkService;
import com.charis.io2.service.SugerService;
/**
* 装饰器设计模式
* 功能:模拟咖啡
* 组件:
* 1、抽象组件:需要装饰的抽象对象(接口或抽象父类)
* 2、具体组件:需要装饰的对象
* 3、抽象装饰类:包含了对抽象组件的引用以及装饰着共有的方法
* 4、具体装饰类:被装饰的对象
* @author Charis
*/
public class DecorateTest2 {
public static void main(String[] args) {
// 创建 咖啡对象
CoffeeDao coffer = new CoffeeDao();
// 1、加入蜂蜜 价格
SugerService suger = new SugerService(coffer);
System.out.println(suger.state()+"----"+suger.money()+"元");
System.out.println("---------------------------");
// 2、加入牛奶 价格
DrinkDao milk = new MilkService(coffer);
System.out.println(milk.state()+"----"+milk.money()+"元");
}
}
输出结果:
装饰器模式:通俗就是类与类之间的关系。
本文地址:https://blog.csdn.net/qq_45042013/article/details/107701475
上一篇: SpringBoot整合阿里云OSS对象存储服务的实现
下一篇: SQL查询的底层运行原理深入分析