首页 > 其他分享 >设计模式(二)结构型

设计模式(二)结构型

时间:2023-05-25 12:12:29浏览次数:35  
标签:对象 适配器 代理 模式 Food 设计模式 public 结构型

1、代理模式

创建一个代理对象来控制对另一个对象的访问,以提供额外的功能或限制。

 1 public interface FoodService {
 2     Food makeChicken();
 3     Food makeNoodle();
 4 }
 5 
 6 public class FoodServiceImpl implements FoodService {
 7     public Food makeChicken() {
 8           Food f = new Chicken()
 9         f.setChicken("1kg");
10           f.setSpicy("1g");
11           f.setSalt("3g");
12         return f;
13     }
14     public Food makeNoodle() {
15         Food f = new Noodle();
16         f.setNoodle("500g");
17         f.setSalt("5g");
18         return f;
19     }
20 }
21 
22 // 代理要表现得“就像是”真实实现类,所以需要实现 FoodService
23 public class FoodServiceProxy implements FoodService {
24 
25     // 内部一定要有一个真实的实现类,当然也可以通过构造方法注入
26     private FoodService foodService = new FoodServiceImpl();
27 
28     public Food makeChicken() {
29         System.out.println("我们马上要开始制作鸡肉了");
30 
31         // 如果我们定义这句为核心代码的话,那么,核心代码是真实实现类做的,
32         // 代理只是在核心代码前后做些“无足轻重”的事情
33         Food food = foodService.makeChicken();
34 
35         System.out.println("鸡肉制作完成啦,加点胡椒粉"); // 增强
36           food.addCondiment("pepper");
37 
38         return food;
39     }
40     public Food makeNoodle() {
41         System.out.println("准备制作拉面~");
42         Food food = foodService.makeNoodle();
43         System.out.println("制作完成啦")
44         return food;
45     }
46 }
代理模式

代理模式说白了就是做 “方法包装” 或做 “方法增强”。在面向切面编程中,其实就是动态代理的过程。比如 Spring 中,我们自己不定义代理类,但是 Spring 会帮我们动态来定义代理,然后把我们定义在 @Before、@After、@Around 中的代码逻辑动态添加到代理中。

2、适配器模式

  • 它允许将不兼容的接口转换为可兼容的接口。
  • 适配器模式包括两种类型:类适配器和对象适配器。类适配器使用继承实现,对象适配器使用组合将适配器包装在一个新的对象中。
  • 适配器模式常用于需要将现有代码或类库与其他代码集成时,因为这些代码可能具有不同的接口。

类适配和对象适配的异同:

    • 一个采用继承,一个采用组合;

    • 类适配属于静态实现,对象适配属于组合的动态实现,对象适配需要多实例化一个对象;

    • 总体来说,对象适配用得比较多

对象适配器代码:

 1 public class CockAdapter implements Duck {
 2 
 3     Cock cock;
 4     // 构造方法中需要一个鸡的实例,此类就是将这只鸡适配成鸭来用
 5       public CockAdapter(Cock cock) {
 6         this.cock = cock;
 7     }
 8 
 9     // 实现鸭的呱呱叫方法
10     @Override
11       public void quack() {
12         // 内部其实是一只鸡的咕咕叫
13         cock.gobble();
14     }
15 
16       @Override
17       public void fly() {
18         cock.fly();
19     }
20 }
对象适配器

3、桥梁模式

将抽象部分和实现部分分离来提高系统的灵活性

 

4、装饰模式

装饰模式和代理模式都是结构型设计模式,它们的目标是在不改变原始类接口的情况下增强类的功能。但是,它们之间有以下几点不同:

  1. 目的不同:代理模式的主要目的是控制对对象的访问,而装饰模式则是为了动态地添加或修改对象的行为。

  2. 所处位置不同:代理模式通常处于调用链的前面,控制对对象的访问,而装饰模式则处于调用链的中间或末尾,动态地添加或修改对象的行为。

  3. 实现方式不同:代理模式一般是通过创建一个代理对象来控制对另一个对象的访问;而装饰模式则是通过创建一个包装器(Decorator)对象来包裹原始对象,在运行时动态地添加或修改其行为。

  4. 职责不同:代理模式的职责是将对被代理对象的访问转发给真实的对象,并可能对其进行授权、限制或缓存等处理;而装饰模式则是为对象动态添加新的行为或修改已有行为。

结构型模式总结:代理模式、适配器模式、桥梁模式、装饰模式、门面模式、组合模式和享元模式。
代理模式是做方法增强的,适配器模式是把鸡包装成鸭这种用来适配接口的,桥梁模式做到了很好的解耦,装饰模式从名字上就看得出来,适合于装饰类或者说是增强类的场景,门面模式的优点是客户端不需要关心实例化过程,只要调用需要的方法即可,组合模式用于描述具有层次结构的数据,享元模式是为了在特定的场景中缓存已经创建的对象,用于提高性能。

 

标签:对象,适配器,代理,模式,Food,设计模式,public,结构型
From: https://www.cnblogs.com/coooookie/p/17430772.html

相关文章

  • Java设计模式-建造者模式
    简介建造者模式是一种创建型设计模式,用于将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。建造者模式通过将复杂对象的构建过程分解为多个简单的步骤来实现。与其他创建型模式不同,建造者模式强调的是将构建过程与表示分离,而不是将对象与其构建方式分离......
  • 《设计模式之禅》Singleton_Pattern--单例模式
    单例模式这个模式是很有意思,确实很有意思的,而且比较简单,但是我还是要说因为它使用的是如此的广泛,如此的有人缘,单例就是单一、独苗的意思,那什么是独一份呢?你的思维是独一份,除此之外还有什么不能山寨的呢?我们举个比较难复制的对象:皇帝(就是那个天子)中国的历史上很少出现两个皇帝并存的......
  • 设计模式(一)创建型
    1、单例模式饿汉模式(最简单):类加载的时候就创建对象,线程安全publicclassSingleton{//首先,将构造方法私有化privateSingleton(){};//创建私有静态实例,意味着在类加载就会进行创建privatestaticSingletoninstance=newSingleton();public......
  • 设计模式
     模板方法设计模式非常重要 什么场景使用过  聚合支付  有共同行为的场景 聚合支付:银联支付支付宝支付 微信支付通过回调通知支付成功修改订单状态为成功1、暴露一个接口,提供给第三方支付回调2、多家支付回调通知参数报文都不相同,但是有共同的通知行为。......
  • 二十三天搞懂设计模式之抽象工厂模式
    文章目录抽象工厂模式1.介绍2.实现3.代码4.总结抽象工厂模式1.介绍意图:提供一个创建一系列相关或者依赖的接口,而无需指定他们具体的类何时使用:系统的产品有多于一个产品族,而系统只消费其中某一族的产品,例子如下当前有个换装游戏,进入不同的游戏场景需要选择不同的游戏套装,比......
  • 二十三天搞懂设计模式之工厂模式
    文章目录1.定义2.工厂模式2.1实现2.2第一种方式代码3.总结1.定义在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。单例也是一种工厂为什么有了new之后,还要有工厂灵活控制生产过程权限、修饰、日志2.工厂模式2.......
  • C#设计模式——上
    文章目录设计模式序言-四大发明之活字印刷——面向对象思想的胜利四大发明之活字印刷——面向对象思想的胜利第一章面试受挫——代码无错就是好?第二章代码规范、重构第三章复制VS复用第四章业务的封装第五章体会简单工厂模式的美妙设计模式序言-四大发明之活字印刷——面向......
  • Java设计模式-原型模式
    简介原型模式是一种创建型设计模式,它允许在运行时通过复制现有对象来创建新对象,而不是通过构造函数创建。这个模式的核心思想是基于一个现有的对象克隆一个新的对象,这个过程对外部世界是透明的,就像对象从未被克隆过一样。原型模式的一个关键优点是可以避免在创建对象时重复性地......
  • C# 常用设计模式有哪些
    原文地址:C#常用设计模式有哪些-C#入门教程-.NET果糖网(donet5.com)C#中常用的设计模式有很多,以下列举几个常用的:1.工厂模式(FactoryPattern)通过工厂方法创建对象,隐藏对象的实例化过程,提供灵活性和可扩展性。1publicinterfaceIAnimal2{3voidSpeak();4......
  • JAVA设计模式之责任链模式
    文章目录一、责任链(ChainofResponsibility)模式二、责任链模式的结构三、源码四、纯的与不纯的责任链模式五、总结一、责任链(ChainofResponsibility)模式顾名思义,责任链模式(ChainofResponsibilityPattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发......