zoukankan      html  css  js  c++  java
  • 工厂方法

    1.概述

    定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其子类

    2.适用性

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

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

    3)当类将创建的对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候

    3.参与者

    1)Product 定义工厂方法所创建的对象的接口

    2)ConcreteProduct 用于实现Product接口

    3)Creator 声明工厂方法,该方法返回一个Product类型的对象。Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的ConcreteProduct对象。可以调用工厂方法以创建一个Product对象

    4)ConcreteCreator 重定义工厂方法以返回一个ConcreteProduct实例

    例子:

    product包:

    1 package product;
    2 
    3 public interface Work {
    4     void doWork();
    5 }

    concreteproduct包:

     1 package concreteproduct;
     2 
     3 import product.Work;
     4 
     5 public class StudentWork implements Work {
     6 
     7     @Override
     8     public void doWork() {
     9         System.out.println("学生在做作业");
    10     }
    11 
    12 }
     1 package concreteproduct;
     2 
     3 import product.Work;
     4 
     5 public class TeacherWork implements Work {
     6 
     7     @Override
     8     public void doWork() {
     9         System.out.println("老师批审作业");
    10     }
    11 
    12 }

    creator包:

    1 package creator;
    2 
    3 import product.Work;
    4 
    5 public interface IWorkFactory {
    6     Work getWork();
    7 }

    concretecreator包:

     1 package concretecreator;
     2 
     3 import concreteproduct.StudentWork;
     4 import product.Work;
     5 import creator.IWorkFactory;
     6 
     7 public class StudentWorkFactory implements IWorkFactory {
     8 
     9     @Override
    10     public Work getWork() {
    11         // TODO Auto-generated method stub
    12         return new StudentWork();
    13     }
    14 
    15 }
     1 package concretecreator;
     2 
     3 import concreteproduct.TeacherWork;
     4 import product.Work;
     5 import creator.IWorkFactory;
     6 
     7 public class TeacherWorkFactory implements IWorkFactory {
     8 
     9     @Override
    10     public Work getWork() {
    11         // TODO Auto-generated method stub
    12         return new TeacherWork();
    13     }
    14 
    15 }

    test包:

     1 package test;
     2 
     3 import concretecreator.StudentWorkFactory;
     4 import concretecreator.TeacherWorkFactory;
     5 import creator.IWorkFactory;
     6 
     7 public class Test {
     8     public static void main(String args[]){
     9         IWorkFactory studentWorkFactory = new StudentWorkFactory();
    10         studentWorkFactory.getWork().doWork();
    11         
    12         IWorkFactory teacherWorkFactory = new TeacherWorkFactory();
    13         teacherWorkFactory.getWork().doWork();
    14     }
    15 }
    肆虐的海水
  • 相关阅读:
    Java ——if条件语句 switch语句
    Java ——Scanner
    Java ——运算符
    机器学习 涉及内容、模型适用范围 、优缺点总结
    数据的爬取和分析
    文本数据处理
    机器学习【十二】使用管道模型对股票涨幅进行回归分析
    Java ——注释 命名
    Java ——类型转换 向args传递参数
    win10操作系统的安装
  • 原文地址:https://www.cnblogs.com/ckysea/p/4532523.html
Copyright © 2011-2022 走看看