大话设计模式-----(九)桥接模式、命令模式
来源:互联网 发布:cool edit pro mac 编辑:程序博客网 时间:2024/05/21 09:57
桥接模式
将抽象部分与他的实现部分分离,使他们都可以独立地变化
实现指的是抽象类和他的派生类用来实现自己的对象
就像不同牌子的手机,会有不同的功能,要是抽象手机,然后逐个添加功能,很多功能大家都有,但也有一些特殊的。把功能也抽象出来。 尽量使用合成/聚合,尽量不要使用类继承。将手机软件传入手机类。因为针对抽象接口编程。直接调用抽象定义的方法。
//手机软件抽象类abstract class HandSetSoft{ public abstract void Run();}
//手机软件具体类class HandSetGame extends HandSetSoft{ @Override public void Run() { // TODO Auto-generated method stub System.out.println("运行手机游戏"); }}class HandSetAddressList extends HandSetSoft{ @Override public void Run() { // TODO Auto-generated method stub System.out.println("运行手机通讯录"); }}
//手机品牌类abstract class HandSetBrand{ HandSetSoft soft; public void SetHandSetSoft(HandSetSoft soft){ this.soft = soft; } public void Run(){ soft.Run(); }}
//具体手机class HandSetBrandN extends HandSetBrand{ @Override public void Run(){ System.out.println("我是N牌手机"); super.Run(); }}class HandSetBrandM extends HandSetBrand{ @Override public void Run(){ System.out.println("我是M牌手机"); super.Run(); }}
客户端
public static void main(String[] args) { HandSetBrandN n = new HandSetBrandN(); n.SetHandSetSoft(new HandSetGame()); n.Run(); n.SetHandSetSoft(new HandSetAddressList()); n.Run(); HandSetBrandM m = new HandSetBrandM(); m.SetHandSetSoft(new HandSetGame()); m.Run();
用书上的手机例子不是很好。现在的软件一般直接就可以用。不分手机品牌了~
命令模式
让行为请求者与行为实现者解耦合
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。
就像开一个烧烤店,不可能厨师来接待你,然后一个一个烤。要一个服务员来传递命令,也就是点餐。
先定义一个厨师
//厨师class Barbecuer{ //烤羊肉串 public void BakeMutton(){ System.out.println("厨师烤羊肉串"); } //烤鸡腿 public void BakeChickenWing(){ System.out.println("厨师烤鸡腿鸡腿"); }}
对厨师下达的命令进行抽象,然后具体的继承类就是烤什么
//抽象命令abstract class Command{ Barbecuer receiverBarbecuer; public Command (Barbecuer reBarbecuer){ this.receiverBarbecuer = reBarbecuer; } //执行命令 abstract public void ExcuteCommand();}
具体烧烤
重写了toString方法,用来判断点的烧烤还有没了
//具体命令类//烤羊肉串class BakeMuttonCommand extends Command{ public BakeMuttonCommand(Barbecuer reBarbecuer) { super(reBarbecuer); // TODO Auto-generated constructor stub } @Override public void ExcuteCommand() { // TODO Auto-generated method stub receiverBarbecuer.BakeMutton(); } @Override public String toString(){ return "BakeMuttonCommand"; }}//烤鸡腿class BakeChickenWing extends Command{ public BakeChickenWing(Barbecuer reBarbecuer) { super(reBarbecuer); // TODO Auto-generated constructor stub } @Override public void ExcuteCommand() { // TODO Auto-generated method stub receiverBarbecuer.BakeChickenWing(); } @Override public String toString(){ return "BakeChickenWing"; }}
再定义个服务员
//服务员class Waiter{ private List<Command> orders = new ArrayList<Command>(); //设置订单 public void SetOrder(Command command){ if(command.toString()=="BakeChickenWing"){ System.out.println("抱歉,没有鸡腿了"); } else{ orders.add(command); System.out.println("增加订单:"+command.toString()); } } public void CancelOrder(Command command){ orders.remove(command); System.out.println("取消订单:"+command.toString()); } //通知厨师订单 public void Notify(){ for(Command command :orders){ command.ExcuteCommand(); } }}
客户端
//先说明谁做烧烤,命令接受者 Barbecuer boyBarbecuer = new Barbecuer(); Command bakeMuttonCommand = new BakeMuttonCommand(boyBarbecuer); Command backChickWingCommand = new BakeChickenWing(boyBarbecuer); Waiter girl = new Waiter(); //点餐 girl.SetOrder(backChickWingCommand); girl.SetOrder(bakeMuttonCommand); girl.SetOrder(bakeMuttonCommand); girl.Notify();
定义个命令接受者,抽象命令,命令的构造函数传入命令接受者。接受者执行命令。
定义命令传达者。进行List来增删命令和判断,传达调用命令。
命令传达者接受客户端传入的命令。执行。
嗯,3月底没有将设计模式看完。原因很多。但就是没看完。要加油了。
那天很开心。谢谢老师。
0 0
- 大话设计模式-----(九)桥接模式、命令模式
- 大话设计模式-命令模式
- 大话设计模式 命令模式
- 大话设计模式-命令模式
- 大话设计模式-----命令模式
- 大话设计-命令模式
- 命令设计模式-大话设计模式
- 设计模式(九)---命令模式
- 《大话设计模式》--笔记(桥接模式)
- 大话设计模式-桥接模式
- 大话设计模式_桥接模式
- 大话设计模式之桥接模式
- 大话设计模式 桥接模式
- 大话设计模式之桥接模式
- linkin大话设计模式--桥接模式
- 大话设计模式—桥接模式
- 大话设计模式-桥接模式
- 大话设计模式之桥接模式
- 从砸壳后的ipa中获取头文件信息
- [kuangbin带你飞]专题八 生成树 A
- (3)-openfire-MyEclipse插件开发环境搭建
- 票据宝
- 密码发生器
- 大话设计模式-----(九)桥接模式、命令模式
- 带你吃透RTMP
- 类模板中的友元声明
- 深入理解Java的接口和抽象类
- c# DataTable转List 和 List转 DataTable
- windows电脑系统远程公司其他电脑加图版
- Linux之定时任务
- jsp+servlet 登陆跳转实现
- (EM算法)The EM Algorithm