JAVA设计模式《三》

王朝学院·作者佚名  2016-05-28
窄屏简体版  字體: 小  |  中  |  大  |  超大  

java设计模式《三》上一篇为大家介绍了一下关于模板方法模式的实现,后来我发现里面有一点小瑕疵,本篇重新为大家介绍一下关于模板方法模式的实现。另外为大家分享一下关于策略模式的实现。

一、模板方法模式:

对于上一篇为大家介绍的实现方法,大家是否有这样的疑问,如果哪位用户说,我要一杯清茶,不要加柠檬,这时我们饮料机该如何操作呢?为了解决这个问题,我们需要引入一个钩子方法,用来达到我们是否加柠檬的操作。

1、饮料机类:

/* * 模板方法模式 */public abstract class Robot { public final void runRobot(){ ZhuShui(); Chong(); DaoShui(); if(flag()){ Add(); } } //添加的钩子方法 public boolean flag(){ return true; } //基本方法把水煮沸 public void ZhuShui(){ System.out.PRintln("把水煮沸"); } public void Chong(){ System.out.println("加咖啡或茶"); } //基本方法倒入杯子中 public void DaoShui(){ System.out.println("把饮料倒入杯子中"); } public void Add(){ System.out.println("加奶或柠檬"); }}

2、清茶类:

public class Tea extends Robot { public void Add() { System.out.println("加柠檬"); } public void Chong() { System.out.println("冲泡茶叶"); } public boolean flag(){ return false; }}

3、测试类:

public class Test { /** * @param 模板方法模式测试 */ public static void main(String[] args) { Robot robot1 = new Coffer(); robot1.runRobot(); System.out.println("**********************"); Robot robot2 = new Tea(); robot2.runRobot(); }}

到这里关于模板方法模式添加钩子方法的实现就介绍完毕,大家可以自行测试,如有疑问请留言。

二、策略模式的实现:

策略模式是什么呢?下面我就为大家讲一个小东西,方便大家理解,比如你的公司现在要开发做一个关于鸭子的项目,其中会出现很多鸭子,有会飞的、有不会飞的、有做火箭飞的,如何来保证我们添加这些特性是不受影响呢?就可以用到我们的策略模式,我们使用接口封装一下飞这个特性,然后通过父类对象调用这个接口,并实行其中飞的方法,这样子类在继承父类时,便可以继承到父类的这个方法。

1、创建Dark父类对象:

public abstract class Dark { public String name; public void getName() { System.out.println("我的名字是:"+name); } public void setName(String name) { this.name = name; } public void Say(){ System.out.println("嘎嘎嘎嘎"); } public abstract void backGround(); flayIm flay; public void setFlay(flayIm flay) { this.flay = flay; } public void getFlay(){ flay.Flay(); } }

2、添加一个封装了飞这个特性的接口方法:

public interface flayIm { public void Flay();}

3、创建实现了该接口的方法:

a、会飞的:

public class Flay implements flayIm { public void Flay() { System.out.println("我用翅膀飞行"); }}

b、不会飞的:

public class noFlay implements flayIm { public void Flay() { System.out.println("我不会飞行"); }}

4、鸭子对象:

a、红色羽毛的鸭子对象:

public class redDark extends Dark { public void backGround() { System.out.println("我的羽毛是红颜色的"); }}

b、黑色羽毛的鸭子对象:

public class blankDark extends Dark { public void backGround() { System.out.println("我是羽毛是黑色的"); }}

c、大黄鸭对象:

public class bigYellowDark extends Dark { public void Say(){ System.out.println("嘎~嘎~嘎~嘎~"); } public void backGround() { System.out.println("我没有羽毛"); }}

5、测试类:

public class DarkTest { /** * @param 测试类对象 */ public static void main(String[] args) { Dark mredDark = new redDark(); Dark mblankDark = new blankDark(); Dark mbigDark = new bigYellowDark(); flayIm flay = new Flay(); flayIm noflay = new noFlay(); mredDark.setName("小红鸭"); mredDark.getName(); mredDark.setFlay(flay); mredDark.Say(); mredDark.backGround(); mredDark.getFlay(); System.out.println("***********************"); mblankDark.setName("小黑鸭"); mblankDark.getName(); mblankDark.setFlay(flay); mblankDark.Say(); mblankDark.backGround(); mblankDark.getFlay(); System.out.println("***********************"); mblankDark.setName("大黄鸭"); mblankDark.getName(); mblankDark.setFlay(noflay); mblankDark.Say(); mblankDark.backGround(); mblankDark.getFlay(); }}

好了,到这里我们的策略模式就介绍完毕,下一篇:设计模式中的适配器、工厂、代理模式

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航