java语言实现创建型设计模式—工厂方法模式

一、描述

基于简单工厂模式中将所有类的创建和初始化放在一个工厂类中出现的问题,我们引进了工厂方法模式,该模式是GoF总结的23种设计模式的第一种,这个设计模式将一个工厂类拆分成多个具体的工厂类,每个具体的工厂类负责相应的类的对象的创建。

在工厂方法模式中,抽象工厂类负责定义创建对象的接口,具体对象的创建由实现该抽象工厂的具体工厂类来完成,它由四部分组成:抽象工厂类、实现抽象工厂类的具体工厂类、抽象类、实现抽象类的具体类。

二、工厂方法模式的优缺点

优点:在工厂方法模式中,创建对象的任务由具体的工厂类负责,一个具体类对应一个具体的工厂类,再由抽象工厂类定义所有具体工厂类创建对象的统一接口,客户端只负责调用具体类创建对应的对象。

如果有一个新的产品加入,那么只需要增加一个具体类和创建这个具体类的工厂类即可,不需要修改原来已有的代码,同一个类的代码量也不会变大,更利于后期的维护,增强了系统的可扩展性。

缺点:每新加一个产品就要增加两个类,需要额外地编写代码,增加了工作量。

三、源代码

1、抽象方法类:

package tong.day4_30.factoryMethod;
/**
 *抽象工厂接口,在这个接口中定义了一个createSalary()方法,由实现该接口的具体类重写该方法,分别创建自己类的对象
 * @author tong
 *
 */
public interface Factory {
	//这是一个公共的抽象方法,用于创建各种类的对象
	public abstract Salary createSalary();

}

2、具体方法类

package tong.day4_30.factoryMethod;
/**
 * 具体的工厂方法,用于创建特定类的对象
 * @author tong
 *
 */
public class GuangdongSalaryFactory implements Factory {

	@Override
	public Salary createSalary() {
		//返回GuangdongSalary类的对象
		return new GuangdongSalary();
	}

}
package tong.day4_30.factoryMethod;
/**
 * 具体的工厂方法,用于创建特定类的对象
 * @author tong
 *
 */
public class ZhejiangSalaryFactory implements Factory {

	@Override
	public Salary createSalary() {
		//返回ZhejiangSalary类的对象
		return new ZhejiangSalary();
	}

}

3、抽象类

package tong.day4_30.factoryMethod;
/**
 * 定义一个薪资接口,所有公司的具体薪资计算都实现这个接口,并重写计算薪资的方法computeSalary()
 * @author tong
 *
 */
public interface Salary {
	public void computeSalary();
}

4、具体类

package tong.day4_30.factoryMethod;
/**
 * 广东分公司的薪资计算类实现了Salary接口,并重写了该接口中的计算薪资的方法computeSalary()
 * @author Administrator
 *
 */
public class GuangdongSalary implements Salary {

	@Override
	public void computeSalary() {
		System.out.println("广东分公司薪资计算");

	}

}
package tong.day4_30.factoryMethod;
/**
 * 浙江分公司的薪资计算类实现了Salary接口,并重写了该接口中的计算薪资的方法computeSalary()
 * @author Administrator
 *
 */
public class ZhejiangSalary implements Salary {

	@Override
	public void computeSalary() {
		System.out.println("浙江分公司薪资计算");

	}

}

5、客户端调用

package tong.day4_30.factoryMethod;
/**
 * 在客户端调用工厂方法来创建每个具体的工厂类对象,使用具体工厂类对象来创建不同的薪资对象,由薪资对象调用computeSalary()计算薪资;
 * 如果还想创建更多的公司薪资,那么就创建一个相应的薪资类,再创建一个相应的薪资计算的具体工厂类。
 * @author tong
 *
 */
public class Client {
	public static void main(String[] args) {
		//创建Factory对象,这里使用多态,创建不同的具体工厂类对象
		Factory factory = new GuangdongSalaryFactory();
		//使用具体的工厂类对象创建不同的薪资对象来计算薪资
		Salary salary = factory.createSalary();
		salary.computeSalary();
		factory = new ZhejiangSalaryFactory();
		salary = factory.createSalary();
		salary.computeSalary();		

	}

}
时间: 2024-12-26 20:34:34

java语言实现创建型设计模式—工厂方法模式的相关文章

Java设计模式(创建型:工厂方法模式+抽象工厂模式)

设计模式根据目的准则可以分为三类: 创建型:creational 创建型的设计模式与对象的创建有关. 结构型:Structural 处理类和对象之间的组合. 行为型:behavioral 描述类和对象如何交互及如何分配职责. 工厂方法模式 站在使用者的角度,工厂方法模式是指使用者提出想要实现的具体功能或者说是想要生产的具体的东西的要求,在通过工厂制造之后就将该东西或功能交付给使用者.使用者并不知道实现的具体过程,只是做了要求提出以及实现的结果的使用. 严谨来说工厂方法模式(Factory Met

Java设计模式(创建型:工厂方法模式)

(该文内容为原创,有不足之处望多多指教!) 设计模式根据目的准则可以分为三类: 创建型:creational 创建型的设计模式与对象的创建有关. 结构型:Structural 处理类和对象之间的组合. 行为型:behavioral 描述类和对象如何交互及如何分配职责. 工厂方法模式是什么? 站在使用者的角度,工厂方法模式是指使用者提出想要实现的具体功能或者说是想要生产的具体的东西的要求,在通过工厂制造之后就将该东西或功能交付给使用者.使用者并不知道实现的具体过程,只是做了要求提出以及实现的结果的

java语言实现创建型设计模式—抽象工厂模式

一.描述 抽象工厂模式是在工厂方法的模式上进一步抽象而来,如果说工厂方法模式是对一个产品结构的创建而言的话,那么抽象工厂模式则是针对多个产品结构而言的,它被用来一次创建多个不同的产品对象. 我们要创建一个摩托车轮胎和摩托车把手,又要创建一个自行车轮胎和自行车把手,如果我们使用工厂方法模式的话我们需要四个类:创建摩托车轮胎的工厂类,创建摩托车把手的工厂类,创建自行车轮胎的工厂类和创建自行车把手的工厂类,但是如果我们使用抽象工厂方法的话,我们需要创建两个工厂类:创建摩托车轮胎和把手的工厂类,创建自行

java语言实现创建型设计模式—原型模式(Prototype)

一.描述 原型模式是通过一个原型对象来标明要创建的对象的类型,然后用复制这个原型对象的方法来拷贝创建更多的同类型对象.例如我们在程序的动态运行过程中有了一个对象,这个对象中包含了一系列的有效数据,我们此时需要一个和该对象完全相同的新对象,并且在拷贝之后,新旧对象之间没有任何联系,对任何一个对象的更改都不影响另一个对象. 在java中所有类都默认继承自java.lang.Object类,在这个Object类中有一个clone()方法,该方法将返回Object对象的一个拷贝. 我们让需要被拷贝的类实

java语言实现创建型设计模式—单例模式

一.描述 单例模式就是确保一个类只有一个实例对象,并且在实例对象必须自动创建,对外不提供该对象的构造方法,并向整个系统提供该实例.使用单例模式相当于整个系统共用该类的实例对象,对于java中的并发访问有重要意义. 单例模式又分为饿汉模式和饱汉模式两种,饿汉模式就是在类加载的时候就创建和初始化该类的唯一的实例对象,而饱汉模式是系统需要用到这个类的实例的时候才创建该对象. 二.单例模式的优缺点 优点:在单列模式中,客户端调用类的实例时,只能调用一个公共的接口,这就为整个系统提供了一个共享的对象.因为

java语言实现创建型设计模式—创建者模式

一.描述 创建者模式单独利用一个创建者类来创建对象并组建对象之间的关系,以简化客户端调用的复杂性.相对于抽象方法模式来说,创建者模式增加了一个单独的用于组装对象和对象之间关系的创建者类,由该类来负责对象的组装,以此来更加清晰地划分各个类的职责. 创建者模式将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示,而且对客户端屏蔽了对象的构建细节,该模式主要由5个部分组成:组装类.抽象创建者类,实现了抽象创建者类的具体创建者类,抽象产品类.实现了抽象产品类的具体产品类.在此可以看出

PYTHON设计模式,创建型之工厂方法模式

我感觉和上一个差不多,可能不要动最要的地方吧... #!/usr/bin/evn python #coding:utf8 class Pizza(object): def prepare(self, type): print 'prepare {type} pizza'.format(type=type) def bake(self, type): print 'bake {type} pizza'.format(type=type) def cut(self, type): print 'cu

php设计模式——工厂方法模式(Factory Method)

二十三种设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 1 <?php 2 /* 3 * php设计模式——工厂方法模式(Factory Method) 4 */ 5 6 7 /* 8 * IAp

Android设计模式——工厂方法模式(Factory Method)

二十三种设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 1 package com.example.main; 2 3 import android.app.Activity; 4 import