- 浏览: 227007 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (109)
- IOS (15)
- 设计模式 (7)
- XML (1)
- Android (31)
- 面试经 (1)
- J2EE (3)
- android md5 加密 (2)
- android imagebutton文字实现 (1)
- 反射机制 (2)
- 基础知识 (1)
- linux (3)
- java (4)
- java基础 (2)
- 文章 (1)
- myeclipse tomcat (1)
- Hadoop (1)
- ubuntu (2)
- redmine (1)
- python (4)
- jmeter (10)
- xamarin (1)
- selenium (9)
- nexus (1)
- appium (3)
- BDD (1)
- apache2 (1)
- zabbix (2)
- python,webdriver (1)
- ajax (1)
- jmeter,正则表达式,关联 (2)
- 性能测试工具 (1)
- Django (0)
- Intelij (1)
- RAP (0)
- 性能测试 (0)
最新评论
工厂方法模式
某人力经理需要维护一份公司雇员的明细单,公司雇员分总经理,项目经理,项目组领导,资深软件工程师,新手软件工程师等五个等级,薪水分别对应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
某人力经理需要维护一份公司雇员的明细单,公司雇员分总经理,项目经理,项目组领导,资深软件工程师,新手软件工程师等五个等级,薪水分别对应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
发表评论
-
《Head First 设计模式》读书笔记
2012-10-06 00:24 991java设计模式 1.策略模式 ... -
软件架构设计的六大原则
2012-10-06 00:24 1083java设计模式 1.“开-闭”原则(OCP) Softwa ... -
[转载]一些软件设计的原则
2012-10-06 00:24 915本文为大家介绍软件设 ... -
管理好聚集——迭代子(Iterator)模式
2012-10-06 00:24 1134java设计模式迭代子 迭代子模式为遍历聚集提供了统一的接口 ... -
策略模式之商场促销
2012-10-05 00:23 1339java设计模式策略模式 每到5.1 10.1等节日,都会看到 ... -
单例(Singleton)模式概述
2012-10-04 23:58 1112单例模式 单例模式的特点: 单例类只能有一个实例 ...
相关推荐
在软件设计模式中,工厂模式是一组非常基础且实用的设计模式,主要分为简单工厂模式、工厂方法模式和抽象工厂模式。这些模式都是为了解决对象创建的问题,通过封装对象的创建过程,使得代码更加灵活,易于扩展和维护...
在"java抽象工厂模式实例----手机工厂"中,我们可以设想有一个手机制造企业,它需要生产不同品牌的手机,如Apple、Samsung等。每个品牌手机都有其独特的零部件,如屏幕、操作系统和摄像头。抽象工厂模式就是用来处理...
本文将深入探讨“工厂模式”、“反射模式”,并结合“登陆”、“查询”及“简单分页”的应用场景,帮助你理解如何在实际项目中运用这些技术。 首先,让我们来看“工厂模式”。工厂模式是一种创建型设计模式,它提供...
这样,工厂方法模式让类的实例化推迟到子类中进行,从而实现了抽象和实例化的分离。在面向对象编程中,这有助于提高代码的灵活性和可扩展性。 在Python中,我们可以创建一个基类(抽象工厂),定义一个返回产品对象...
在工厂方法模式中,配置文件可能包含信息,比如哪个工厂类对应哪种类型的产品,通过读取这些信息,工厂类可以使用反射来实例化相应的对象。这种方式使得系统可以适应不断变化的需求,而无需修改代码。 文档部分可能...
工厂方法模式的核心思想是定义一个创建对象的接口,但让子类决定实例化哪一个类。这样,工厂方法可以使类的实例化过程延迟到子类中进行,即所谓的“多态性构造”。 描述中的“创建型模式-工厂方法模式-最简单的源码...
在"tests"目录下,我们可以找到测试用例,这些用例通常会创建不同的工厂实例,然后使用这些工厂创建产品,并进行各种操作,以验证抽象工厂模式的正确性和有效性。测试用例可能会涉及以下内容: - 创建工厂实例,...
java设计模式 工厂方法模式uml类图,一张图就让你秒懂工厂方法模式
工厂方法模式的核心思想是定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪一个类。在工厂方法模式中,工厂类不再直接创建产品对象,而是返回由参数所决定的具体产品的对象。这种模式将对象的创建和对象...
工厂模式通常分为三种类型:简单工厂模式、工厂方法模式和抽象工厂模式。 1. **简单工厂模式**:这是最基础的工厂模式形式,它包含一个静态工厂方法,用于创建对象。简单工厂模式适用于产品种类较少且不经常变动的...
抽象工厂模式-开辟新的果园 代理模式-水果的销售 单例模式-果园喷洒杀虫剂 访问者模式-果农培育果树 工厂方法模式-果园引进新品种 观察者模式-果园的监控 简单工厂模式-果园种植水果 建造者模式-建造不同的果园 原型...
在软件设计模式中,工厂模式是一种非常常见的创建型模式,用于封装对象的创建过程,使得客户端无需关注具体的对象实例化细节。本篇文章将对三种主要的工厂模式:简单工厂、工厂方法和抽象工厂进行深入的对比和总结。...
简单工厂模式中,有一个静态工厂类负责创建所有产品,而在工厂方法模式中,产品创建的责任被转移到了具体的子类中,这样更符合面向对象的原则,同时也更利于扩展。 总的来说,工厂方法模式是一种实用的设计模式,它...
在工厂方法模式中,我们定义了一个用于创建对象的接口,但让子类决定实例化哪一个类。该模式将实例化推迟到子类。 工厂方法模式包含四个主要角色: 1. **抽象产品(Product)**:定义了产品的接口。 2. **具体产品...
工厂模式主要有三种类型:简单工厂模式、工厂方法模式和抽象工厂模式。 1. **简单工厂模式**: - 在这个模式中,有一个中心工厂类负责创建所有需要的对象。它根据传入的参数或者条件判断来决定创建哪个具体的产品...
工厂方法模式是面向对象设计模式中的行为模式,它属于创建型模式的一种,主要解决的是当一个类不知道它所必须创建的对象的类的时候,或者当一个类希望由它的子类来决定实例化哪个类的时候,如何封装这个实例化过程的...
工厂方法模式是设计模式中的一员,它的核心思想是定义一个创建对象的接口,但让子类决定实例化哪一个类。这样,工厂方法将类的实例化过程推迟到了子类中,使得子类能够决定实例化哪些对象。 工厂方法模式有以下几个...
- 对于简单工厂模式,可能有一个名为`SimpleFactory`的类,其中包含一个静态方法,如`createProduct`,该方法根据输入参数返回相应的产品实例。 - 工厂方法模式的示例可能会有多个工厂类,例如`ConcreteFactory1`和`...
工厂方法模式的核心思想是定义一个创建对象的接口,但让子类决定实例化哪一个类。这样,工厂方法就把类的实例化推迟到子类中进行。这种模式通常由四个主要角色组成: 1. 抽象产品(Abstract Product):这是产品...