首页 > 其他分享 >设计模式--结构型模式

设计模式--结构型模式

时间:2022-12-16 22:11:18浏览次数:36  
标签:FoodService -- 代理 模式 实现 设计模式 makeChicken public 结构型

结构型模式

建型模式介绍了创建对象的一些设计模式,这节介绍的结构型模式旨在通过改变代码结构来达到解耦的目的,使得我们的代码容易维护和扩展。

代理模式

第一个要介绍的代理模式是最常使用的模式之一了,用一个代理来隐藏具体实现类的实现细节,通常还用于在真实的实现的前后添加一部分逻辑。

既然说是代理,那就要对客户端隐藏真实实现,由代理来负责客户端的所有请求。当然,代理只是个代理,它不会完成实际的业务逻辑,而是一层皮而已,但是对于客户端来说,它必须表现得就是客户端需要的真实实现。
理解代理这个词,这个模式其实就简单了。 下面上代码理解。 代理接口:

//要有一个代理接口让实现类和代理实现类来实现。
public interface FoodService {
    Food makeChicken();
}

 被代理的实现类:

public class FoodServiceImpl implements FoodService {
    @Override
    public Food makeChicken() {
        Food f = new Chicken();
        f.setChicken("1kg");
        f.setSpicy("1g");
        f.setSalt("3g");
        System.out.println("鸡肉加好佐料了");
        return f;
    }
}

 

被代理实现类就只需要做自己该做的事情就好了,不需要管别的。

代理实现类:

public class FoodServiceProxy implements FoodService {
    // 内部一定要有一个真实的实现类,当然也可以通过构造方法注入
    private FoodService foodService = new FoodServiceImpl();
    
    @Override
    public Food makeChicken() {
        System.out.println("开始制作鸡肉");
        
        // 如果我们定义这句为核心代码的话,那么,核心代码是真实实现类做的,
        // 代理只是在核心代码前后做些“无足轻重”的事情
        Food food = foodService.makeChicken();
        
        System.out.println("鸡肉制作完成啦,加点胡椒粉");
        food.addCondiment("pepper");
        System.out.println("上锅咯");
        return food;
    }
}

客户端调用,注意,我们要用代理来实例化接口:

// 这里用代理类来实例化
FoodService foodService = new FoodServiceProxy();
foodService.makeChicken();

所谓代理模式,就是对被代理方法包装或者叫增强,这样用户就是用FoodServiceProxy(); 而且代理的实现不变,如果需要更改功能,只需要修改被代理的类foodServiceImpl() 具体的实现。从而做到对使用者的隔离。

标签:FoodService,--,代理,模式,实现,设计模式,makeChicken,public,结构型
From: https://www.cnblogs.com/aalan/p/16988382.html

相关文章

  • EasyPytest测试平台开发日志之系统设计
    EasyPytest测试平台,帮你高效管理Pytest测试用例。EP平台的定位是Pytest测试用例管理平台,80%的自动化用例开发在PyCharm等专业的IDE中进行,20%的用例调度和结果查看就交给E......
  • 【文档】推荐几个文档编写神器
    一、参考资料​​docsify​​​​有了docsify神器,从此爱上看文档-简书​​​​登录·语雀​​......
  • Android添加构建依赖项Add Build Dependencies
    TheGradlebuildsysteminAndroidStudiomakesiteasytoincludeexternalbinariesorotherlibrarymodulestoyourbuildasdependencies.Thedependenciesca......
  • Android实现导航菜单左右滑动效果
    本文给大家介绍在Android中如何实现顶部导航菜单左右滑动效果。今天给大家介绍在Android中实现顶部导航菜单左右滑动效果的二种解决方案。第一种解决方案: 然使and......
  • 【RocketMQ】RocketMQ入门与实战
    一、参考资料​​看完保送阿里的RocketMQ知识点(超详细)_敖丙​​阿里RocketMQQuickStart_怀揣梦想,努力前行​​GitHub-apache/rocketmq:MirrorofApacheRocketMQ​​......
  • 超炫的Button按钮展开弧形动画效果
       今天从网上看到一个这样的效果,感觉很有创意,自己也搜集了一些资料,仿照着实现了一下。   下面就直接上源码:   首先看一下布局文件:[html] ​​view......
  • 2、运行Git前的配置
    一般在新的系统上,我们都需要先配置下自己的Git工作环境。配置工作只需一次,以后升级时还会沿用现在的配置。当然,如果需要,你随时可以用相同的命令修改已有的配置。​​git-c......
  • 【SpringBoot】Spring Data Redis封装和Spring Cache
    一、参考资料​​RedisUtil:最全的Java操作Redis的工具类,使用StringRedisTemplate实现,封装了对Redis五种基本类型的各种操作!​​​​SpringCache-简书​​​​redis分布......
  • 1、Git的安装及基本工作流程
    基本的Git工作流程如下:1.在工作目录中修改某些文件。2.对修改后的文件进行快照,然后保存到暂存区域。3.提交更新,将保存在暂存区域的文件快照永久转储到Git目录中。......
  • 【面试题】大厂面试题资料
    一、参考资料​​小公司工作一年半,准备社招跳槽去大厂!​​......