• java设计模式之二抽象工厂模式(Abstract Factory)


    工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。因为抽象工厂不太好理解,我们先看看图,然后就和代码,就比较容易理解。

     1 package com.qcf.test2;
     2 /**
     3  * 抽象工厂模式
     4  * 为方法创建一个接口
     5  * 为工厂类创建一个接口
     6  * 如果再增加一辆车那就再创建一个方法类继承Car,创建一个factory继承Factory
     7  * @author Computer
     8  *
     9  */
    10 public class AbstractFactory {
    11     public static void main(String[] args) {
    12         Car car=new BigCarFactory().product();
    13         car.getName();
    14     }
    15 }
    16 /**
    17  * 工厂类接口
    18  * @author Computer
    19  *
    20  */
    21 interface Factory{
    22     Car product();
    23 }
    24 /**
    25  * Bmw工厂生产类
    26  * @author Computer
    27  *
    28  */
    29  class BmwCarFactory implements Factory{
    30 
    31     @Override
    32     public Car product() {
    33         return new Bmw();
    34     }
    35  }
    36 
    37  /**
    38   * Big工厂生产类
    39   * @author Computer
    40   *
    41   */
    42   class BigCarFactory implements Factory{
    43 
    44      @Override
    45      public Car product() {
    46          return new BigCar();
    47      }
    48 }
    49 
    50 /**
    51  * 接口
    52  * @author Computer
    53  *
    54  */
    55 interface Car{
    56     void getName();    
    57 }
    58 /**
    59  * 实现接口的子类
    60  * @author Computer
    61  *
    62  */
    63 class Bmw implements Car{
    64     @Override
    65     public void getName() {
    66         System.out.println("BMW  Car....");
    67     }
    68 }
    69 /**
    70  * 实现接口的子类
    71  * @author Computer
    72  *
    73  */ 
    74 class BigCar implements Car{
    75     @Override
    76     public void getName() {
    77         System.out.println("Big Car...");
    78     }
    79 }
    View Code
  • 相关阅读:
    前端安全之XSS攻击
    从JavaScript执行上下文理解变量提升
    em、rem和px的区别
    纯CSS实现幻灯片效果
    小白在使用ISE编写verilog代码综合时犯得错误及我自己的解决办法
    结构体指针中的一点困惑
    xilinx fpga中块ram的使用——简单双端口ram的使用
    在模块中如何去写输出标志位的程序
    学习感悟
    xilinx fpga 生成3*3窗口
  • 原文地址:https://www.cnblogs.com/quchengfeng/p/4308833.html
Copyright © 2020-2023  润新知