zoukankan      html  css  js  c++  java
  • 工厂设计模式

     1 interface Fruit{
     2     public void eat();
     3 }
     4 class Apple implements Fruit{
     5     public void eat() {
     6         System.out.println("吃苹果");
     7     }
     8 }
     9 class Orange implements Fruit{
    10     public void eat() {
    11         System.out.println("吃橘子");
    12     }
    13 }
    14 public class TestFactory {
    15     @Test
    16     public void test() {
    17         Fruit f = new Apple();
    18         f.eat();
    19     }
    20 }

    这样的代码有没有问题呢?从程序的设计思路上,主方法应该就表示一个客户端,住房法中的代码应该越少越好。此时在主方法中直接指定了要操作的子类,就表示了客户端和特定的子类紧密的耦合在一起了,这时如果要更换子类,就需要改变客户端。

    我们参考JVM的工作原理:程序->JVM->操作系统。这就是一个解耦合的范例,我们写的程序不用关心在哪个OS上运行,用JVM来作为程序和操作系统之间的中间体,而不必将一个程序和固定的OS耦合在一起。

    解决方法:

    此过渡端在程序中就称为工厂设计

     1 interface Fruit{
     2     public void eat();
     3 }
     4 class Apple implements Fruit{
     5     public void eat() {
     6         System.out.println("吃苹果");
     7     }
     8 }
     9 class Orange implements Fruit{
    10     public void eat() {
    11         System.out.println("吃橘子");
    12     }
    13 }
    14 class Factory{        //定义工厂类
    15     public static Fruit getInstance(String className) {
    16         Fruit f = null;
    17         //"apple"写在前面是因为这样就可以避免className为空值后出现NullPointerException
    18         if("apple".equals(className)) {  
    19             f = new Apple();
    20         }
    21         if("orange".equals(className)) {
    22             f = new Orange();
    23         }
    24         return f;
    25     }
    26 }
    27 public class TestFactory {
    28     @Test
    29     public void test() {
    30         Scanner scanner = new Scanner(System.in);
    31         String str = scanner.next();
    32         Fruit f =Factory.getInstance(str);
    33         if(f!=null)
    34             f.eat();
    35     }
    36 }

    在加入工厂类后,每次客户端只负责给用户输入或输出,它的代码几乎不用变,实现了低耦合。

    工厂类执行流程

  • 相关阅读:
    【HAOI2014】走出金字塔
    【HAOI2008】圆上的整点
    LOJ #116 有源汇点有上下界的最大流
    ZOJ [P2314] 无源汇点有上下界模版
    最小费用最大流模版
    最大流模版 dinic
    最大流模版 EK
    HDU [P1533]
    HDU [2255] 奔小康赚大钱
    POJ [P2289] Jamie's Contact Groups
  • 原文地址:https://www.cnblogs.com/mzct123/p/8283533.html
Copyright © 2011-2022 走看看