• 工厂设计模式


     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 }

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

    工厂类执行流程

  • 相关阅读:
    (转载)Linux进程基础
    C语言字符串
    DNS域名解析服务
    Linux-SSH远程管理
    Linux文件系统深入了解
    Linux进程和计划任务管理
    Linux账户与权限管理
    MySQL实现读写分离
    SQL数据库常用函数
    MySQL进阶查询(二)
  • 原文地址:https://www.cnblogs.com/mzct123/p/8283533.html
Copyright © 2020-2023  润新知