• 设计模式-工厂方法模式


    1. 为什么需要工厂方法模式:

       工厂方法模式意在分离产品与创建的两个层次,使得用户在一个工厂池中科院选择想使用的产品,而忽略其创建过程。

    进一步说,就像一个大型工厂,对消费者而言,只需知道都有什么工厂的产品生产出来,而不必关注产品是如何生产的,但对于工厂来说,需要知道产品的制造过程。

    2.模式角色与类结构图

      Creator: 创建工厂的接口

      ConcreteCreator: 具体产品实现

      Produce 产品接口

      ConcreteProduct :具体产品实现

    3.适用场景

          1 当一个类不知道它所必须创建的对象的类的时候。

      2 当一个类希望由他的子类来制定它所创建的对象的时候

      3 当类创建对象的职责委托给多个帮助子类中的某一个,并且希望进行一些信息的局部初始化的时候。

    4.实际应用

    应用场景:
    1.JDK中Calendar的getInstance方法
    2.Spring中IOC容器创建管理bean对象
    3.Hibernate中SessionFactory创建Session
    4.JDBC中Connection对象的获取
    5.XML解析时DocumentBuilderFactory创建解析工厂
    6.反射中Class对象的newInstance()

     1 package org.factory.factorymethod;
     2 
     3 public interface CarFactory {
     4     Car createCar();
     5 }
     6 
     7 package org.factory.factorymethod;
     8 
     9 public interface Car {
    10     void run();
    11 }
    12 
    13 public class AudiFactory implements CarFactory {
    14 
    15     @Override
    16     public Car createCar() {
    17         // TODO Auto-generated method stub
    18         return  new Audi();
    19     }
    20 
    21 }
    22 
    23 public class BydFactory implements CarFactory {
    24 
    25     @Override
    26     public Car createCar() {
    27         // TODO Auto-generated method stub
    28         return  new Byd();
    29     }
    30 
    31 }
    32 
    33 public class BenzFactory implements CarFactory {
    34 
    35     @Override
    36     public Car createCar() {
    37         // TODO Auto-generated method stub
    38         return new Benz();
    39     }
    40 
    41 }
    42 
    43 public class Audi implements Car {
    44 
    45     @Override
    46     public void run() {
    47         // TODO Auto-generated method stub
    48         System.out.println("奥迪再跑!");
    49     }
    50 
    51 }
    52 
    53 public class Benz implements Car {
    54 
    55     @Override
    56     public void run() {
    57         // TODO Auto-generated method stub
    58         System.out.println("奔驰再跑!");
    59     }
    60 
    61 }
    62 
    63 public class Byd implements Car {
    64 
    65     @Override
    66     public void run() {
    67         // TODO Auto-generated method stub
    68         System.out.println("比亚迪再跑!");
    69     }
    70 
    71 }
    72 
    73 package org.factory.factorymethod;
    74 
    75 public class Client {
    76 
    77     public static void main(String[] args) {
    78         // TODO Auto-generated method stub
    79         Car c1 = new AudiFactory().createCar();
    80         Car c2 = new BydFactory().createCar();
    81         
    82         c1.run();
    83         c2.run();
    84     }
    85 
    86 }
    View Code
  • 相关阅读:
    UVA11375
    uva11806(容斥原理)
    uva10325(容斥原理)
    hdu4135(容斥原理)
    CF798
    多线程
    (转载)SVN 提交操作缩写(A D M R) .
    上不了网,如何判断
    (转载)myeclipse项目名称重命名
    mysql模糊查询
  • 原文地址:https://www.cnblogs.com/ilinuxer/p/4937297.html
Copyright © 2020-2023  润新知