`

工厂方法模式---实例

 
阅读更多
工厂方法模式
        某人力经理需要维护一份公司雇员的明细单,公司雇员分总经理,项目经理,项目组领导,资深软件工程师,新手软件工程师等五个等级,薪水分别对应12000,9000,7000,5000,2000,现输入是姓名和职位,要求将这两个信息转化为对应的实例.



     根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。


基类


Java代码 
public abstract class Employee{  
  protected String name;  
  protected String title;  
  protected int salary;  
    
  public static final String Title_JuniorSoftwareEngineer="JSE";  
  public static final String Title_SeniorSoftwareEngineer="SSE";  
  public static final String Title_TeamLeader="TL";  
  public static final String Title_ProjectLeader="PL";  
  public static final String Title_GeneralManager="GM";  
    
  public Employee(String name,String title){  
    this.name=name;  
    this.title=title;  
  }  
    
  public String toString(){  
    return "雇员名="+name+" 雇员职位="+title+" 薪水="+salary;  
  }  


public abstract class Employee{
  protected String name;
  protected String title;
  protected int salary;
 
  public static final String Title_JuniorSoftwareEngineer="JSE";
  public static final String Title_SeniorSoftwareEngineer="SSE";
  public static final String Title_TeamLeader="TL";
  public static final String Title_ProjectLeader="PL";
  public static final String Title_GeneralManager="GM";
 
  public Employee(String name,String title){
    this.name=name;
    this.title=title;
  }
 
  public String toString(){
    return "雇员名="+name+" 雇员职位="+title+" 薪水="+salary;
  }
} 各类


Java代码 
public class GeneralManager extends Employee{  
  public GeneralManager(String name){  
    super(name,Employee.Title_GeneralManager);  
    this.salary=12000;  
  }  
}  
 
class ProjectLeader extends Employee{  
  public ProjectLeader(String name){  
    super(name,Employee.Title_ProjectLeader);  
    this.salary=9000;  
  }  
}  
 
class TeamLeader extends Employee{  
  public TeamLeader(String name){  
    super(name,Employee.Title_TeamLeader);  
    this.salary=7000;  
  }  
}  
 
class SeniorSoftwareEngineer extends Employee{  
  public SeniorSoftwareEngineer(String name){  
    super(name,Employee.Title_SeniorSoftwareEngineer);  
    this.salary=5000;  
  }  
}  
 
class JuniorSoftwareEngineer extends Employee{  
  public JuniorSoftwareEngineer(String name){  
    super(name,Employee.Title_JuniorSoftwareEngineer);  
    this.salary=2000;  
  }  


public class GeneralManager extends Employee{
  public GeneralManager(String name){
    super(name,Employee.Title_GeneralManager);
    this.salary=12000;
  }
}

class ProjectLeader extends Employee{
  public ProjectLeader(String name){
    super(name,Employee.Title_ProjectLeader);
    this.salary=9000;
  }
}

class TeamLeader extends Employee{
  public TeamLeader(String name){
    super(name,Employee.Title_TeamLeader);
    this.salary=7000;
  }
}

class SeniorSoftwareEngineer extends Employee{
  public SeniorSoftwareEngineer(String name){
    super(name,Employee.Title_SeniorSoftwareEngineer);
    this.salary=5000;
  }
}

class JuniorSoftwareEngineer extends Employee{
  public JuniorSoftwareEngineer(String name){
    super(name,Employee.Title_JuniorSoftwareEngineer);
    this.salary=2000;
  }
}




Java代码 
package com.xzy;  
 
import java.util.ArrayList;  
import java.util.List;  
 
public class HrManager{  
  private List<Employee> employeeList;  
    
  private void addEmployee(Employee newEmployee){  
        
    if(employeeList==null){  
      employeeList=new ArrayList<Employee>();  
    }  
      
    employeeList.add(newEmployee);  
  }  
    
  public void addEmployee(String name,String title){  
    addEmployee(EmployeeFactory.generate(name, title));  
  }  
    
  public void printEmployeeList(){  
    for(Employee employee:employeeList){  
      System.out.println(employee);  
    }  
  }  


package com.xzy;

import java.util.ArrayList;
import java.util.List;

public class HrManager{
  private List<Employee> employeeList;
 
  private void addEmployee(Employee newEmployee){
 
    if(employeeList==null){
      employeeList=new ArrayList<Employee>();
    }
   
    employeeList.add(newEmployee);
  }
 
  public void addEmployee(String name,String title){
    addEmployee(EmployeeFactory.generate(name, title));
  }
 
  public void printEmployeeList(){
    for(Employee employee:employeeList){
      System.out.println(employee);
    }
  }
} 工厂类,生成各个实例


Java代码 
package com.xzy;  
 
public class EmployeeFactory {  
      
    public static Employee generate(String name, String title) {  
        if (title.equals(Employee.Title_GeneralManager)) {  
            return new GeneralManager(name);  
              
        } else if (title.equals(Employee.Title_ProjectLeader)) {  
            return new ProjectLeader(name);  
              
        } else if (title.equals(Employee.Title_TeamLeader)) {  
            return new TeamLeader(name);  
        } else if (title.equals(Employee.Title_SeniorSoftwareEngineer)) {  
            return new SeniorSoftwareEngineer(name);  
        } else {  
            return new JuniorSoftwareEngineer(name);  
        }  
    }  


package com.xzy;

public class EmployeeFactory {

public static Employee generate(String name, String title) {
if (title.equals(Employee.Title_GeneralManager)) {
return new GeneralManager(name);

} else if (title.equals(Employee.Title_ProjectLeader)) {
return new ProjectLeader(name);

} else if (title.equals(Employee.Title_TeamLeader)) {
return new TeamLeader(name);
} else if (title.equals(Employee.Title_SeniorSoftwareEngineer)) {
return new SeniorSoftwareEngineer(name);
} else {
return new JuniorSoftwareEngineer(name);
}
}
}









Java代码 
public class Main{  
 
public static void main(String[] args){  
    HrManager hrManager=new HrManager();  
      
    hrManager.addEmployee("Andy","GM");  
    hrManager.addEmployee("Bill","PL");  
    hrManager.addEmployee("Cindy","TL");  
    hrManager.addEmployee("Dell","SSE");  
    hrManager.addEmployee("Edin","JSE");  
    hrManager.addEmployee("Felex","JSE");  
    hrManager.addEmployee("Green","Unknown");  
      
    hrManager.printEmployeeList();  
  }  


public class Main{

public static void main(String[] args){
    HrManager hrManager=new HrManager();
   
    hrManager.addEmployee("Andy","GM");
    hrManager.addEmployee("Bill","PL");
    hrManager.addEmployee("Cindy","TL");
    hrManager.addEmployee("Dell","SSE");
    hrManager.addEmployee("Edin","JSE");
    hrManager.addEmployee("Felex","JSE");
    hrManager.addEmployee("Green","Unknown");
   
    hrManager.printEmployeeList();
  }
}

结果:



雇员名=Andy 雇员职位=GM 薪水=12000
雇员名=Bill 雇员职位=PL 薪水=9000
雇员名=Cindy 雇员职位=TL 薪水=7000
雇员名=Dell 雇员职位=SSE 薪水=5000
雇员名=Edin 雇员职位=JSE 薪水=2000
雇员名=Felex 雇员职位=JSE 薪水=2000
雇员名=Green 雇员职位=JSE 薪水=2000



分享到:
评论

相关推荐

    简单工厂模式-工厂方法模式-抽象工厂模式

    在软件设计模式中,工厂模式是一组非常基础且实用的设计模式,主要分为简单工厂模式、工厂方法模式和抽象工厂模式。这些模式都是为了解决对象创建的问题,通过封装对象的创建过程,使得代码更加灵活,易于扩展和维护...

    java抽象工厂模式实例----手机工厂

    在"java抽象工厂模式实例----手机工厂"中,我们可以设想有一个手机制造企业,它需要生产不同品牌的手机,如Apple、Samsung等。每个品牌手机都有其独特的零部件,如屏幕、操作系统和摄像头。抽象工厂模式就是用来处理...

    工厂模式-反射模式-登陆-查询-实例-简单分页

    本文将深入探讨“工厂模式”、“反射模式”,并结合“登陆”、“查询”及“简单分页”的应用场景,帮助你理解如何在实际项目中运用这些技术。 首先,让我们来看“工厂模式”。工厂模式是一种创建型设计模式,它提供...

    设计模式专题之(二)工厂方法模式---设计模式工厂方法模式示例代码(python--c++)

    这样,工厂方法模式让类的实例化推迟到子类中进行,从而实现了抽象和实例化的分离。在面向对象编程中,这有助于提高代码的灵活性和可扩展性。 在Python中,我们可以创建一个基类(抽象工厂),定义一个返回产品对象...

    设计模式-工厂方法模式

    在工厂方法模式中,配置文件可能包含信息,比如哪个工厂类对应哪种类型的产品,通过读取这些信息,工厂类可以使用反射来实例化相应的对象。这种方式使得系统可以适应不断变化的需求,而无需修改代码。 文档部分可能...

    c++设计模式-工厂方法模式

    工厂方法模式的核心思想是定义一个创建对象的接口,但让子类决定实例化哪一个类。这样,工厂方法可以使类的实例化过程延迟到子类中进行,即所谓的“多态性构造”。 描述中的“创建型模式-工厂方法模式-最简单的源码...

    抽象工厂模式--演示代码

    在"tests"目录下,我们可以找到测试用例,这些用例通常会创建不同的工厂实例,然后使用这些工厂创建产品,并进行各种操作,以验证抽象工厂模式的正确性和有效性。测试用例可能会涉及以下内容: - 创建工厂实例,...

    工厂方法模式uml类图

    java设计模式 工厂方法模式uml类图,一张图就让你秒懂工厂方法模式

    设计模式-工厂方法模式视频

    工厂方法模式的核心思想是定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪一个类。在工厂方法模式中,工厂类不再直接创建产品对象,而是返回由参数所决定的具体产品的对象。这种模式将对象的创建和对象...

    模式之一工厂模式-------------------------

    工厂模式通常分为三种类型:简单工厂模式、工厂方法模式和抽象工厂模式。 1. **简单工厂模式**:这是最基础的工厂模式形式,它包含一个静态工厂方法,用于创建对象。简单工厂模式适用于产品种类较少且不经常变动的...

    c# 设计模式实例教程

    抽象工厂模式-开辟新的果园 代理模式-水果的销售 单例模式-果园喷洒杀虫剂 访问者模式-果农培育果树 工厂方法模式-果园引进新品种 观察者模式-果园的监控 简单工厂模式-果园种植水果 建造者模式-建造不同的果园 原型...

    简单工厂-工厂方法-抽象工厂 对比总结

    在软件设计模式中,工厂模式是一种非常常见的创建型模式,用于封装对象的创建过程,使得客户端无需关注具体的对象实例化细节。本篇文章将对三种主要的工厂模式:简单工厂、工厂方法和抽象工厂进行深入的对比和总结。...

    设计模式之-工厂方法-FactoryMethod

    简单工厂模式中,有一个静态工厂类负责创建所有产品,而在工厂方法模式中,产品创建的责任被转移到了具体的子类中,这样更符合面向对象的原则,同时也更利于扩展。 总的来说,工厂方法模式是一种实用的设计模式,它...

    软件设计之工厂方法模式,源代码

    在工厂方法模式中,我们定义了一个用于创建对象的接口,但让子类决定实例化哪一个类。该模式将实例化推迟到子类。 工厂方法模式包含四个主要角色: 1. **抽象产品(Product)**:定义了产品的接口。 2. **具体产品...

    java设计模式-工厂模式

    工厂模式主要有三种类型:简单工厂模式、工厂方法模式和抽象工厂模式。 1. **简单工厂模式**: - 在这个模式中,有一个中心工厂类负责创建所有需要的对象。它根据传入的参数或者条件判断来决定创建哪个具体的产品...

    工厂方法模式源文件

    工厂方法模式是面向对象设计模式中的行为模式,它属于创建型模式的一种,主要解决的是当一个类不知道它所必须创建的对象的类的时候,或者当一个类希望由它的子类来决定实例化哪个类的时候,如何封装这个实例化过程的...

    设计模式——工厂方法模式

    工厂方法模式是设计模式中的一员,它的核心思想是定义一个创建对象的接口,但让子类决定实例化哪一个类。这样,工厂方法将类的实例化过程推迟到了子类中,使得子类能够决定实例化哪些对象。 工厂方法模式有以下几个...

    工厂模式实例代码

    - 对于简单工厂模式,可能有一个名为`SimpleFactory`的类,其中包含一个静态方法,如`createProduct`,该方法根据输入参数返回相应的产品实例。 - 工厂方法模式的示例可能会有多个工厂类,例如`ConcreteFactory1`和`...

    我讲设计模式--工厂方法

    工厂方法模式的核心思想是定义一个创建对象的接口,但让子类决定实例化哪一个类。这样,工厂方法就把类的实例化推迟到子类中进行。这种模式通常由四个主要角色组成: 1. 抽象产品(Abstract Product):这是产品...

Global site tag (gtag.js) - Google Analytics