23种设计模式-桥梁模式《官渡之战》
对于许久不用的东西,容易忘记。百度许久,也未能找到自己所要。 从今日起,有些东西就记载下来,不仅方便自己,希望能帮到他人吧!
定义:
结构型模式一种 .设计程序过程中 , 会经常使用到抽象类或者接口来完成抽象的过程 ,
释义
继承或实现的类通过不同的实现方式来完成抽象类或接口的变化 , 也就是实现过程的变化 , 但可能会有这样的情况 , 抽象过程同样需要进行变化 , 也就是抽象类或者接口需要变化 , 这样就会造成原有的继承或实现关系复杂 , 关系混乱 .桥梁模式利用将抽象层和实现层进行解耦 , 使两者不再像继承或实现这样的较强的关系 , 从而使抽象和实现层更加独立的完成变化的过程 . 使系统更加清晰 。
性质
抽象化 , 将一组事物共有的特性提出的一个过程 .实现化 , 将抽象化具体实现的过程 , 可以根据抽象化等级接口来对应实现化等级 .解耦 , 将抽象化与具体化之前的耦合解脱开 .强关联 , 编译时期已经确定 , 运行时期将无法动态进行修改 .弱关联 , 可以动态确定 , 同时在运行期可以进行动态修改 。
内容
桥梁模式主要由抽象类、修正抽象类、实现类以及具体实现类组成 .
抽象类: 制定接口 , 同时给出一个实现化的引用 .
修正抽象类 :扩展抽象类 , 修正或改变抽象类中指定的接口 .
实现类 :提供实现化角色的接口 , 但不进行具体实现过程 , 该接口不一定给出与抽象类相同的接口 , 只是提供实现的方式 .
具体实现类 完成实现类中定义的实现接口的具体实现过程 。
桥梁模式优点
隔离抽象和实现 , 使双方能够各自完成扩展 .
官渡之战郭嘉的十胜十败策略我们不谈,也不讨论小说中关二爷手起刀落连斩颜良文丑,自然也就不会说偷袭乌巢等等了。
我要说的就是,曹操带领兵马打败袁绍。
曹操白手起家,拥有三个兵种,步、骑、弓弩。兵种的目的只用一个那就是打仗,抢地盘,抢女人。曹操虽然是军事家,但是指挥的本领可是远远比不上韩信,韩信也不能命令每个士兵,他只是把命令一级一级传递下去。终于曹操的事业引来的巨大的转折点,那就是官渡之战,胜则天下第一,败则一命呜呼。
例子:
首先定义一个兵种抽象类,不论是什么兵,首先有个名称,然后是武器等等
package com.example.yancy.model.BridgePattern;/*** 创建日期:2018/8/30 0030 on 9:48* 描述:兵种* 作者: yancy*/
public abstract class Arms {/*** 不论什么兵种,给一个称呼吧 !骑兵、步兵、弓弩兵?*/public abstract void armor();/*** 不论什么兵种,武器少不了。*/public abstract void arms();
}
package com.example.yancy.model.BridgePattern;/*** 创建日期:2018/8/30 0030 on 9:55* 描述:弓弩兵* 作者: yancy*/
public class BowWarrior extends Arms{@Overridepublic void armor() {System.out.println("我们是火弩手...");}@Overridepublic void arms() {System.out.println("手持诸葛连弩,腰跨松香宝剑...");}
}
package com.example.yancy.model.BridgePattern;/*** 创建日期:2018/8/30 0030 on 9:55* 描述:骑兵* 作者: yancy*/
public class Cavalry extends Arms{@Overridepublic void armor() {System.out.println("我们是虎豹骑...");}@Overridepublic void arms() {System.out.println("身穿重甲,马披装甲...");}
}
package com.example.yancy.model.BridgePattern;/*** 创建日期:2018/8/30 0030 on 9:54* 描述:步兵* 作者: yancy*/
public class Infantry extends Arms{@Overridepublic void armor() {System.out.println("我们是虎卫军...");}@Overridepublic void arms() {System.out.println("左手持顿,右手持戟...");}
}
接受命令的统领,统领兵种不一样,职责当然不一样
package com.example.yancy.model.BridgePattern;/*** 创建日期:2018/8/30 0030 on 10:18* 描述: 统领* 作者: yancy*/
public class Impl {private Arms arms;public Impl( Arms arms){this.arms=arms;}public void fighting(){arms.armor();arms.arms();}
}
package com.example.yancy.model.BridgePattern;/*** 创建日期:2018/8/30 0030 on 10:33* 描述: 步兵的统领* 作者: yancy*/
public class InfantryImpl extends Impl {public InfantryImpl(Arms arms) {super(arms);}@Overridepublic void fighting() {super.fighting();System.out.println("正面刚,曹操就不用保护了...");}
}
package com.example.yancy.model.BridgePattern;/*** 创建日期:2018/8/30 0030 on 9:55* 描述:弓弩兵统领* 作者: yancy*/
public class BowWarriorImpl extends Impl{public BowWarriorImpl(Arms arms) {super(arms);}@Overridepublic void fighting() {super.fighting();System.out.println("疯狂输出...");}
}
package com.example.yancy.model.BridgePattern;/*** 创建日期:2018/8/30 0030 on 10:34* 描述:骑兵的统领* 作者: yancy*/
public class CavalryImpl extends Impl{public CavalryImpl(Arms arms) {super(arms);}@Overridepublic void fighting() {super.fighting();System.out.println("虎豹骑,冲锋...");}
}
OK,官渡之战开始了
@Testpublic void testBridge(){//System.out.println("官渡之战开始了...");//骑兵准备就绪Cavalry cavalry=new Cavalry();//步兵准备就绪Infantry infantry=new Infantry();//弓弩手准备就绪BowWarrior warrior=new BowWarrior();System.out.println("曹孟德 开始发号施令,调兵遣将...");//曹孟德 开始发号施令,调兵遣将System.out.println(".............................");System.out.println("曹纯接到命令(虎豹骑统领)...");CavalryImpl cavalry1=new CavalryImpl(cavalry);cavalry1.fighting();System.out.println(".............................");System.out.println("许褚接到命令(护卫军统领)...");InfantryImpl infantry1=new InfantryImpl(infantry);infantry1.fighting();System.out.println(".............................");System.out.println("小李广 李青接到命令(杜撰的)...");BowWarriorImpl warrior1=new BowWarriorImpl(warrior);warrior1.fighting();System.out.println(".............................");System.out.println("官渡之战大获全胜...");}
官渡之战开始了...
曹孟德 开始发号施令,调兵遣将...
.............................
曹纯接到命令(虎豹骑统领)...
我们是虎豹骑...
身穿重甲,马披装甲...
虎豹骑,冲锋...
.............................
许褚接到命令(护卫军统领)...
我们是虎卫军...
左手持顿,右手持戟...
正面刚,曹操就不用保护了...
.............................
小李广 李青接到命令(杜撰的)...
我们是火弩手...
手持诸葛连弩,腰跨松香宝剑...
疯狂输出...
.............................
官渡之战大获全胜...
结局大家都知道,上面就是打印结果,可是这样没有体现桥梁模式。
我们再来看一下桥梁模式的释义。
释义
继承或实现的类通过不同的实现方式来完成抽象类或接口的变化 , 也就是实现过程的变化 , 但可能会有这样的情况 , 抽象过程同样需要进行变化 , 也就是抽象类或者接口需要变化 , 这样就会造成原有的继承或实现关系复杂 , 关系混乱 .桥梁模式利用将抽象层和实现层进行解耦 , 使两者不再像继承或实现这样的较强的关系 , 从而使抽象和实现层更加独立的完成变化的过程 . 使系统更加清晰 。
曹操的首先肯定不止这些兵种比如青州兵,敢死兵等等,名头最大的莫过于现在的摸金校尉了,曹操现在要组建摸金校尉怎么处理?
1.继承Arms(兵种抽象类)
2.继承统领类
package com.example.yancy.model.BridgePattern;/*** 创建日期:2018/8/30 0030 on 9:58* 描述: 摸金校尉* 作者: yancy*/
public class MoJinXiaoWei extends Arms{@Overridepublic void armor() {System.out.println("我们是摸金校尉...");}@Overridepublic void arms() {System.out.println("我们是手持风水罗盘,腰跨洛阳铲...");}
}
package com.example.yancy.model.BridgePattern;/*** 创建日期:2018/8/30 0030 on 9:58* 描述: 摸金校尉的职责* 作者: yancy*/
public class MoJinXiaoWeiImpl extends Impl{public MoJinXiaoWeiImpl(Arms arms) {super(arms);}@Overridepublic void fighting() {super.fighting();System.out.println("尸体为伴,运陪葬品...");}
}
这样就很完成了一个兵种的创建。
总之桥梁模式的作用:桥梁模式利用将抽象层和实现层进行解耦 , 使两者不再像继承或实现这样的较强的关系 , 从而使抽象和实现层更加独立的完成变化的过程 . 使系统更加清晰
23种设计模式-桥梁模式《官渡之战》相关推荐
- 23种设计模式----------代理模式(一)
代理模式也叫委托模式. 代理模式定义:对其他对象提供一种代理从而控制对这个对象的访问.就是,代理类 代理 被代理类,来执行被代理类里的方法. 一般情况下,代理模式化有三个角色. 1,抽象的主题类(或者 ...
- 23种设计模式——桥接模式
文章目录 23种设计模式--桥接模式 1.桥接模式概述 2.桥接模式结构 3.桥接模式的实现 4.桥接模式的注意事项和细节 23种设计模式--桥接模式 1.桥接模式概述 桥接模式介绍 桥接(Bridg ...
- 23种设计模式-工厂模式
23种设计模式-工厂模式 前言: [我们为什么需要使用工厂模式?] /*** 在使用工厂模式之前,我们要创建 实现了相同接口的对象 都需要直接new(),如下* */@Testpublic void ...
- 23种设计模式——工厂模式
文章目录 23种设计模式--工厂模式 1.工厂模式概述 2.简单工厂模式 2.1.简单工厂模式的优缺点 2.2.简单工厂模式的结构 2.3.简单工厂模式的实现 3.工厂方法模式 3.1.工厂方法模式的 ...
- SSM源码分析之23种设计模式(策略模式和模板模式)
23种设计模式之策略模式和模板模式 目录 策略模式使用场景 策略模式实现 模板模式 目录 策略模式使用场景 策略模式:根据用户的需求处理数据时候需要对算法做出选择,固定的一些算法(不再发生变化的算法) ...
- 23种设计模式常用模式
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用.设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案.这些解决方案是众多软件开发人员经过 ...
- 23种设计模式----模板方法模式----行为模式
模板方法模式 1.模板方法模式是什么 2.模板方法的组成 3.模板方法中不同的类的行为 4.例子 4.1 例子的背景 4.2模板类--父亲寻找继承人的方式 4.3实现类----孩子类 4.4测试类-- ...
- 23种设计模式----原型模式----创建型模式
原型模式 1.1什么是原型模式 1.2为什么要使用原型模式 2.原型模式的解释 3.例子 3.1例子将要实现的目标 3.2例子设计 3.3原型类 3.4具体实现的3个原型实例类 3.5管理类 3.6工 ...
- 23种设计模式-命令模式《三国大阅兵》
对于许久不用的东西,容易忘记.百度许久,也未能找到自己所要. 从今日起,有些东西就记载下来,不仅方便自己,希望能帮到他人吧! 在面向对象程式设计的范畴中,命令模式(Command Pattern)是一 ...
最新文章
- C++ Primer 5th笔记(chap 17 标准库特殊设施)bitset操作
- Kaggle Titanic补充篇
- 【Spark Summit East 2017】可扩展性机器学习的特征哈希
- html隐藏域 js,JS实现“隐藏与显示”功能(多种方法)
- vue 音频文件打包后找不到文件
- 协议号(网络层)、端口号(传输层)详解
- 图的应用--最小生成树
- 增值税怎么用计算机算,增值税计算器
- NDK 开发之 Android LOG 工具类
- 离开互联网公司的年轻人,按下人生的重启键
- YOLOX 论文笔记
- 51单片机游戏(俄罗斯方块)
- 【释义详解】Software License (软件许可证)是什么?
- java源码系列:HashMap底层存储原理详解——5、技术本质-原理过程-算法-取模会带来一个什么问题?什么是哈希冲突?为什么要用链表?
- 关于arduino的各种网站
- fwr310虚拟服务器设置,Fast迅捷FWR310无线路由器怎么设置
- 牛客网暑期ACM多校训练营(第二场)G.transform (二分+思维)
- vue2 通过 axios 访问koa2,从mysql 拿到数据更新vue2中的内容
- 小米盒子3的刷机方式
- 查看hive的当前参数值