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

结构型模式

时间:2022-10-07 18:05:10浏览次数:26  
标签:Overridepublic void System 模式 println 结构型 public out

运动员代言 - 代理模式
/**
* @Classname IRunner
* @Created by 寂然
* @Description 抽象运动员
*/
public interface IRunner {
//主要工作就是跑步
public void run();
}
/**
* @Classname Runner
* @Created by 寂然
* @Description 具体短跑运动员
*/
public class Runner implements IRunner{
@Override
public void run() {
System.out.println("运动员训练赛进行中:动作很潇洒");}
}
/**
* @Classname RunnerAgent
* @Created by 寂然
* @Description =运动员代理人
*/
public class RunnerAgent implements IRunner{
private IRunner runner;
public RunnerAgent(IRunner runner) {
this.runner = runner;
}
//代理人是不会跑的,里面其实是调用对应的运动员
@Override
public void run() {
Random random = new Random();
//随机模拟结果
if (random.nextBoolean()){
System.out.println("正在与代理人沟通:沟通结果很顺利");
runner.run();
System.out.println("运动员训练赛观看完毕,沟通后续合作事宜");
} else {
System.out.println("没能和代理人谈妥,暂时无法安排训练赛");
}
}
}
/**
* @Classname Client
* @Created by 寂然
* @Description 场景类
*/
public class Client {
public static void main(String[] args) {
//定义一个短跑运动员
IRunner runner = new Runner();
RunnerAgent runnerAgent = new RunnerAgent(runner);
//要求运动员跑步
System.out.println("金主找到运动员的官方代理人,想看运动员的训练赛");
runnerAgent.run();
}
}
运动员代言 - 装饰者模式
/**
* @Classname IRunner
* @Created by 寂然
* @Description 抽象运动员
*/
public interface IRunner {
//主要工作就是跑步
public void run();
}
/**
* @Classname Runner
* @Created by 寂然
* @Description 具体短跑运动员
*/
public class Runner implements IRunner {
@Override
public void run() {
System.out.println("运动员训练赛进行中:动作很潇洒");
}
}
/**
* @Classname RunnerDecorator
* @Created by 寂然
* @Description 装饰类
*/
public class RunnerDecorator implements IRunner{
private IRunner runner;
public RunnerDecorator(IRunner runner) {
this.runner = runner;
}
@Override
public void run() {
System.out.println("为了加快运动员的速度,给运动员脚上增加喷气动力装置");
runner.run();
}
}
/**
* @Classname Client不同点:
代理模式负责限定是否可以调用目标角色以及是否对于目标角色前后进行必要业务逻辑处理,不对目标
类的功能做
任何处理,而装饰者模式着重是在接口不变的情况下增强/减弱目标类的功能,提供了比继承更有弹性
的扩展方案
装饰者模式vs适配器模式
丑小鸭 - 装饰者模式
* @Created by 寂然
* @Description I walk very slowly, but I never walk backwards
*/
public class Client {
public static void main(String[] args) {
//定义一个运动员
IRunner runner = new Runner();
//对运动员的速度进行增强
runner = new RunnerDecorator(runner);
System.out.println("看看增强后运动员的表现");
runner.run();
}
}
/**
* @Classname Swan
* @Created by 寂然
* @Description 天鹅通用接口
*
*/
public interface Swan {
//天鹅会飞
public void fly();
//天鹅会叫
public void cry();
//天鹅拥有美丽的外表
public void desAppearance();
}/**
* @Classname UglyDucking
* @Created by 寂然
* @Description 丑小鸭
*/
public class UglyDucking implements Swan{
@Override
public void fly() {
//丑小鸭还比较小
System.out.println("现在还在发育阶段,翅膀不硬,不能飞行");
}
@Override
public void cry() {
System.out.println("叫声是发出微弱的声音");
}
@Override
public void desAppearance() {
System.out.println("外表是脏兮兮的白色,毛茸茸的脑袋");
}
}
/**
* @Classname Decorator
* @Created by 寂然
* @Description 抽象的装饰者
*/
public class Decorator implements Swan{
private Swan swan;
//修饰的是谁?
public Decorator(Swan swan) {
this.swan = swan;
}
@Override
public void fly() {
swan.fly();
}
@Override
public void cry() {
swan.cry();
}
@Override
public void desAppearance() {swan.desAppearance();
}
}
/**
* @Classname BeautifyAppearance
* @Created by 寂然
* @Description 外形美化的具体装饰者
*/
public class BeautifyAppearance extends Decorator{
public BeautifyAppearance(Swan swan) {
super(swan);
}
@Override
public void desAppearance() {
System.out.println("外表变成纯白色的了!非常惹鸭喜爱");
}
}
/**
* @Classname StrongBehavior
* @Created by 寂然
* @Description 强化飞行能力的行为
*/
public class StrongBehavior extends Decorator{
public StrongBehavior(Swan swan) {
super(swan);
}
@Override
public void fly() {
System.out.println("慢慢发现自己可以飞行,开始低空盘旋了");
}
}
/**
* @Classname Client
* @Created by 寂然
* @Description 场景类
*/
public class Client {
public static void main(String[] args) {
System.out.println("很久很久以前,这里有一只丑陋自卑的鸭子");
Swan uglyDucking = new UglyDucking();
//展示一下小鸭子
uglyDucking.desAppearance();丑小鸭 - 适配器模式
uglyDucking.cry();
uglyDucking.fly();
System.out.println("终于发现丑小鸭原来是一只天鹅");
uglyDucking = new BeautifyAppearance(uglyDucking);
uglyDucking = new StrongBehavior(uglyDucking);
//装饰附加功能之后,再次展示小鸭子
uglyDucking.desAppearance();
uglyDucking.cry();
uglyDucking.fly();
}
}
丑小鸭 - 适配器模式
/**
* @Classname Duck
* @Created by 寂然
* @Description 鸭类接口
*/
public interface Duck {
//会叫
public void cry();
//描述鸭子的外形
public void desAppearance();
//描述鸭子的其他行为
public void desBehavior();
}
/**
* @Classname Swan
* @Created by 寂然
* @Description 天鹅接口
*/
public interface Swan {
//天鹅会飞
public void fly();
//天鹅会叫
public void cry();
//天鹅拥有美丽的外表
public void desAppearance();}
/**
* @Classname Ducking
* @Created by 寂然
* @Description 正宗的小鸭子
*/
public class Ducking implements Duck{
@Override
public void cry() {
System.out.println("鸭子的叫声是 ga ga ga");
}
@Override
public void desAppearance() {
System.out.println("鸭子的外形是黄白相间,嘴巴是扁扁的");
}
@Override
public void desBehavior() {
System.out.println("鸭子会游泳,chua chua chua");
}
}
/**
* @Classname WhiteSwan
* @Created by 寂然
* @Description 白天鹅
*/
public class WhiteSwan implements Swan{
@Override
public void fly() {
System.out.println("可以飞翔,咻咻咻----");
}
@Override
public void cry() {
System.out.println("叫声是很独特的");
}
@Override
public void desAppearance() {
System.out.println("外形是纯白色的,特别惹人喜爱");
}
}
/**
* @Classname UglyDucking* @Created by 寂然
* @Description 鸭妈妈把小天鹅当丑小鸭看待
*/
public class UglyDucking extends WhiteSwan implements Duck{
@Override
public void desBehavior() {
//丑小鸭不仅会游泳
System.out.println("会chua chua chua 游泳");
super.fly();
}
@Override
public void cry() {
super.cry();
}
@Override
public void desAppearance() {
super.desAppearance();
}
}
/**
* @Classname Client
* @Created by 寂然
* @Description 场景类
*/
public class Client {
public static void main(String[] args) {
System.out.println("鸭妈妈有很多孩子,其中其他的都长的差不多");
Ducking ducking = new Ducking();
ducking.cry();
ducking.desBehavior();
ducking.desAppearance();
System.out.println("有一只独特的小鸭子,刚开始很丑,其实长大后是这样的");
Duck uglyDucking = new UglyDucking();
uglyDucking.cry();
uglyDucking.desBehavior();
uglyDucking.desAppearance();
}
}
装饰者模式&适配器模式的不同点
意图不同
装饰者的意图是加强目标对象的功能
适配器的意图是两个不同接口的对象之间的转化
目标对象不同
装饰者模式装饰的对象必须是自己的同宗(相同的接口或者父类)
适配器模式适配的是两个不同接口的对象
场景不同
装饰者模式在任何时候都可以使用,只要是想增强类的功能
适配器模式更像是一种补救模式,作为一个紧急处理的手段来采用
扩展性不同
装饰者模式很容易扩展
适配器模式扩展性不如装饰者

标签:Overridepublic,void,System,模式,println,结构型,public,out
From: https://blog.51cto.com/u_15716707/5734780

相关文章

  • tauri 新的桌面应用开发模式
    tauri是基于rust以及webkit开发桌面应用的框架特性高性能构建的软件包小安全跨平台githubaction集成核心能力(文件系统文档,原生通知)自更新sidecar(可以集成其他二进制......
  • KAL1 LINUX 官方文档之虚拟机版本 --- 安装 Hyper-V 增强会话模式(来宾工具)(更新于2022
     安装“GuestVMPackages”,总体上可以为​​VM提供更好的用户体验。这就是为什么从KaliLinux2019.3开始,在设置过程中它应该检测KaliLinux是否在VM中。如果是......
  • 设计模式系列2 - 工厂模式
     主要讲述工厂模式,以及实际应用的场景,基于java。看这篇文章前,最好能先看完上一篇文章“设计模式系列1”,因为知识有依赖关系。往期精选(欢迎转发~~)Java全套学习资......
  • 设计模式系列3 - builder模式
    主要讲解建造者builder模式和实际应用的场景,基于java。往期精选(欢迎转发~~)Java全套学习资料(14W字),耗时半年整理消息队列:从选型到原理,一文带你全部掌握肝了一个月的ET......
  • 【设计模式系列4】组合模式
    往期精选(欢迎转发~~)Java全套学习资料(14W字),耗时半年整理消息队列:从选型到原理,一文带你全部掌握肝了一个月的ETCD,从Raft原理到实践我肝了三个月,为你写出了GO核心手册......
  • 设计模式系列1 - 模板模式&策略模式
    分别讲述模板模式和策略模式的使用姿势,以及两者的区别,基于java。往期精选(欢迎转发~~)Java全套学习资料(14W字),耗时半年整理消息队列:从选型到原理,一文带你全部掌握肝了......
  • 设计模式-中介者模式
    让互相调用的模块之间解耦合。好,那这讲的中介者模式的话呢,它的这个英文叫做mediator,这个中介者模式,它是什么意思,给大家说这么一个场景吧,比如说我们现在有3个模块,然后模块1......
  • Java设计模式 —— 适配器模式
    7适配器模式7.1结构型模式结构型模式(StructuralPattern)关注如何将现有类或对象组织在一起形成更强大的结构。结构型模式根据描述目标不同可以分为两种:类结构型......
  • 策略模式的多种实现
    最近几天好好补了下血,才恢复了点精力。所以有了一点写些啥的欲望,那就写一下设计模式好了。 设计模式,相信大家应该都或多或少的接触过。总的来说,设计模式是一些前辈们在......
  • 面试官:工厂方法模式是什么?
    真正的大师永远怀着一颗学徒的心吃不了学习的苦就要吃生活的苦文章持续更新,可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】更有我为大家准备的福利哟!回复【项目】......