设为首页 加入收藏

TOP

跟着ZHONGHuan学习设计模式--工厂方法(二)
2015-07-20 17:58:56 来源: 作者: 【 】 浏览:10
Tags:跟着 ZHONGHuan 学习 设计模式 工厂 方法
  • voidaddPeiLiao();//意思是加配料,原谅我用汉字拼音表示
  • }
  • ?
  • class HaiXian implements InstantNoodle{//意思是海鲜面
  • publicHaiXian(){
  • System.out.println(拆了一包海鲜面);
  • }
  • publicvoid addOil(){
  • System.out.println(加了点油);
  • }
  • publicvoid addPeiLiao(){
  • System.out.println(加了点海鲜风味的配料);
  • }
  • }
  • ?
  • class HongShao implements InstantNoodle{//意思是红烧面
  • publicHongShao(){
  • System.out.println(拆了一包红烧面);
  • }
  • publicvoid addOil(){
  • System.out.println(加了点油,红烧面的油味道比较重哦!);
  • }
  • publicvoid addPeiLiao(){
  • System.out.println(经典的红烧面配料);
  • }
  • }
  • ?
  • class Factory{
  • publicInstantNoodle create(String str){
  • InstantNoodlenoodle=null;
  • if(str.equals(HaiXian)){
  • System.out.println(我要开始做红烧面了);
  • noodle=newHongShao();
  • noodle.addOil();
  • noodle.addPeiLiao();
  • System.out.println(面做完了);
  • }
  • if(str.equals(HongShao)){
  • System.out.println(我要开始做海鲜面了);
  • noodle=newHaiXian();
  • noodle.addOil();
  • noodle.addPeiLiao();
  • System.out.println(面做完了);
  • }
  • System.out.println(-----------------------------------------------);
  • returnnoodle;
  • }
  • }
  • ?
  • public class Main{
  • publicstatic void main(String[] args){
  • Factoryfac=new Factory();
  • //假设现在肚子饿了,开始做面,第一个人想吃海鲜面
  • InstantNoodlenoodle1=fac.create(HaiXian);
  • ?
  • //另外一个人想要吃海鲜面
  • InstantNoodlenoodle2=fac.create(HongShao);
  • ?
  • }
  • }

    ?

    ?

    可是即使这样,也有不尽如人意的地方,方便面有很多种做法,每个人的做法不尽相同,当然上面就只有几个因素。比如一个人喜欢先加油,再配料;另外一个人喜欢先配料,再加油。你可能会觉得不就是泡面嘛,讲究这么多干嘛。可是,严格的说,这些先后顺序是会影响我们的面的口感的。如果只是上面的两种先后顺序,可能你会说,简单工厂可以搞定,可是如果因素比较多了,并且我们无法事先把所有因素都放进简单工厂内,那么后面来了新的要求,我们就没有办法,需要更改简单工厂的代码了,这就违反了开闭原则。所以,使用工厂方法来解决这个问题。工厂方法的解决方案是下面这样。

    ?

    [java] view plaincopy
    1. interface InstantNoodle
    2. {
    3. voidaddOil();// 意思是加油
    4. ?
    5. voidaddPeiLiao();// 意思是加配料,原谅我用汉字拼音表示
    6. }
    7. ?
    8. class HaiXian implements InstantNoodle
    9. {// 意思是海鲜面
    10. publicHaiXian()
    11. {
    12. System.out.println(拆了一包海鲜面);
    13. }
    14. ?
    15. publicvoid addOil()
    16. {
    17. System.out.println(加了点油);
    18. }
    19. ?
    20. publicvoid addPeiLiao()
    21. {
    22. System.out.println(加了点海鲜风味的配料);
    23. }
    24. }
    25. ?
    26. class HongShao implements InstantNoodle
    27. {// 意思是红烧面
    28. publicHongShao()
    29. {
    30. System.out.println(拆了一包红烧面);
    31. }
    32. ?
    33. publicvoid addOil()
    34. {
    35. System.out.println(加了点油,红烧面的油味道比较重哦!);
    36. }
    37. ?
    38. publicvoid addPeiLiao()
    39. {
    40. System.out.println(经典的红烧面配料);
    41. }
    42. }
    43. ?
    44. interface Factory
    45. {
    46. InstantNoodlecreate();
    47. }
    48. ?
    49. // 海鲜面制作工厂,使用先加油,后放配料做法
    50. class HaiXianFac1 implements Factory
    51. {
    52. publicInstantNoodle create()
    53. {
    54. System.out.println(我要开始做海鲜面了,制作手法为先加油,后放配料);
    55. InstantNoodlenoodle = new HaiXian();
    56. noodle.addOil();// 这里是先加油,后放配料
    57. noodle.addPeiLiao();
    58. System.out.println(-----------------------------------------------);
    59. returnnoodle;
    60. }
    61. }
    62. ?
    63. // 海鲜面制作工厂,使用先放配料,后加油做法
    64. class HaiXianFac2 implements Factory
    65. {
    66. publicInstantNoodle create()
    67. {
    68. System.out.println(我要开始做海鲜面了,使用制作手法为先放配料,后加油);
    69. InstantNoodlenoodle = new HaiXian();
    70. noodle.addPeiLiao();
    71. noodle.addOil();// 这里是先放配料,后加油
    72. System.out.println(-----------------------------------------------);
    73. returnnoodle;
    74. }
    75. }
    76. ?
    77. public class Main
    78. {
    79. publicstatic void main(String[] args)
    80. {
    81. ?
    82. //假设现在肚子饿了,开始做面,第一个人想吃海鲜面,他喜欢先加油,后放配料
    83. Factoryfac1 = new HaiXianFac1();
    84. InstantNoodlenoodle1 = fac1.create();
    85. ?
    86. //另外一个人也想要吃海鲜面,他喜欢先方配料,后加油
    87. Factoryfac2 = new HaiXianFac2();
    88. InstantNoodlenoodle2 = fac2.create();
    89. ?
    90. }
    91. }

      ?

      加入还有一些人对红烧面有一些要求,新建工厂类,来生产符合这个要求的产品,这样的做法更加符合开闭原则。通过使用工厂方法,可以解决上述的问题。当然也许会有更好的解决方案,我说上述的例子,只是为了能够表示工厂模式的优势。

  • 首页 上一页 1 2 下一页 尾页 2/2/2
    】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
    分享到: 
    上一篇HDU 1412 {A} + {B} 下一篇跟着ZHONGHuan学习设计模式--抽象..

    评论

    帐  号: 密码: (新用户注册)
    验 证 码:
    表  情:
    内  容: