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

一、描述

创建者模式单独利用一个创建者类来创建对象并组建对象之间的关系,以简化客户端调用的复杂性。相对于抽象方法模式来说,创建者模式增加了一个单独的用于组装对象和对象之间关系的创建者类,由该类来负责对象的组装,以此来更加清晰地划分各个类的职责。

创建者模式将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示,而且对客户端屏蔽了对象的构建细节,该模式主要由5个部分组成:组装类、抽象创建者类,实现了抽象创建者类的具体创建者类,抽象产品类、实现了抽象产品类的具体产品类。在此可以看出与抽象方法模式相比多了一个组装类。

二、创建者模式的优缺点

优点:在创建者模式中客户端不再负责对象的创建和组装,而是由一个具体的组装类来完成这项功能,将组装的责任交给组装类,客户端只负责对象的调用,从而更加明确了各个类的职责。

缺点:利用创建者模式可以创建出不同类型的产品,但是如果要创建的产品差异非常大就需要编写多个创建者类来实现,这无疑增加了代码的复杂性,而且创建者类只是在构造相关部件的发杂关系上有优势,如果要增加一个部件还是需要改变原有的代码,增加新的模块。

三、源代码

总述:一个公司有计算薪金和社保需求,我们有多个分公司,每个分公司都要计算这两项,现在我们需要创建分公司对象,利用各个对象调用各个公司计算这两项业务的方法来得出结果,我需要以下几个类:抽象工厂类(定义创建对象的接口),两个子公司的具体工厂类(实现了抽象工厂类中创建对象的方法来产生具体的对象),抽象薪资类(定义薪资计算的标准接口),两个子公司的具体薪资类(实现抽象薪资类中计算薪资的方法),抽象社保类(定义社保计算的标准接口),两个子公司的具体社保类(实现抽象社保类中计算社保的方法),组装类(负责对象的创建和兑现直接关系的组装),客户端调用类(用来调用组装类组装对象并调用相应的实现类方法)。

1、抽象工厂类

package tong.day5_1.builder;
/**
 *抽象的工厂接口,在这个接口中定义了一个两个抽象方法,分别创建薪资类对象和社保类对象,由实现该接口的具体类重写该方法,分别创建自己类的对象
 * @author tong
 *
 */
public interface AbstractFactory {
	//抽象方法,用于创建各种类的对象
	public abstract Salary createSalary();
	public abstract Insurance createInsurance();

}

2、具体工厂类

package tong.day5_1.builder;

public class GuangdongFactory implements AbstractFactory {

	@Override
	public Salary createSalary() {
		return new GuangdongSalary();
	}

	@Override
	public Insurance createInsurance() {
		return new GuangdongInsurance();
	}

}
package tong.day5_1.builder;
/**
 * 具体工厂类实现抽象工厂中的所有方法,并返回该类的薪资对象和社保对象
 * @author tong
 *
 */
public class ZhejiangFactory implements AbstractFactory {

	@Override
	public Salary createSalary() {
		return new ZhejiangSalary();
	}

	@Override
	public Insurance createInsurance() {
		return new ZhejiangInsurance();
	}

}

3、抽象薪资类

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

4、具体薪资类

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

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

	}

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

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

	}

}

5、抽象社保类

package tong.day5_1.builder;
/**
 * 抽象社保类
 * @author tong
 *
 */
public interface Insurance {
	public abstract void computeInsurance();
}

6、具体社保类

package tong.day5_1.builder;

public class GuangdongInsurance implements Insurance {

	@Override
	public void computeInsurance() {
		System.out.println("广东分公司社会保险计算");

	}

}
package tong.day5_1.builder;

public class ZhejiangInsurance implements Insurance {

	@Override
	public void computeInsurance() {
		System.out.println("浙江分公司社会保险计算");

	}

}

6、组装类

package tong.day5_1.builder;
/**
 * 这里使用一个组装类来简化客户端创建对象、初始化对象以及构建对象之间的关系
 * @author tong
 *
 */
public class Builder {
	private AbstractFactory abstractFactory;
	//根据传入的参数确定初始化哪个公司的工厂类对象,这里使用多态,根据传入的参数动态创建相应的对象
	public Builder(AbstractFactory abstractFactory) {
		this.abstractFactory = abstractFactory;
	}
	//组装的具体实现方法,调用类中计算薪金和社保的方法
	public void moneySum() {
		Salary salary = abstractFactory.createSalary();
		salary.computeSalary();
		Insurance insurance = abstractFactory.createInsurance();
		insurance.computeInsurance();
	}
}

7、客户端调用类

package tong.day5_1.builder;
/**
 * 客户端在这里得到了简化,不用再考虑如何组装创建和组装对象,而只需要调用专门的组装类来组装对象
 * @author tong
 *
 */
public class Client {
	public static void main(String[] args) {
		//组装浙江分公司的对象
		Builder builder = new Builder(new ZhejiangFactory());
		builder.moneySum();
		System.out.println("--------------");
		//组装广东分公司的对象
		builder = new Builder(new GuangdongFactory());
		builder.moneySum();
	}
}

四、运行结果

时间: 2024-10-19 12:42:08

java语言实现创建型设计模式—创建者模式的相关文章

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

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

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

一.描述 基于简单工厂模式中将所有类的创建和初始化放在一个工厂类中出现的问题,我们引进了工厂方法模式,该模式是GoF总结的23种设计模式的第一种,这个设计模式将一个工厂类拆分成多个具体的工厂类,每个具体的工厂类负责相应的类的对象的创建. 在工厂方法模式中,抽象工厂类负责定义创建对象的接口,具体对象的创建由实现该抽象工厂的具体工厂类来完成,它由四部分组成:抽象工厂类.实现抽象工厂类的具体工厂类.抽象类.实现抽象类的具体类. 二.工厂方法模式的优缺点 优点:在工厂方法模式中,创建对象的任务由具体的工

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

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

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

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

"围观"设计模式(9)--创建型之创建者模式(Builder Pattern)

生成器模式(英:Builder Pattern)是一种设计模式,又名:建造模式,是一种对象构建模式.它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象.----WIKIPEDIA 个人的理解: 建造者模式可以设置不同的属性或者行为,创建出不一样的对象.比如说生产汽车,假如有三个重要的工序,塑形.拼装.上色.那么可以通过创建者模式来设置,这三道工序中不同的车来说,三道工序可能就是不一样的.通过创建者模式来创建出对象的表现形式也自然就不一样.

java语言实现创建型模式——简单工厂模式

一.描述 简单工厂模式又名静态工厂方法模式,是所有工厂模式中最简单的一个,它定义一个具体的工厂类来负责创建所有类的对象并初始化创建的对象,它主要由3部分组成:工厂类.抽象类.实现抽象类的具体类,然后通过客户端调用工厂类创建相应的对象. 注意:简单工厂模式不属于GoF总结的23种设计模式,它是相当于初学java的HelloWorld案例,帮助初学者了解设计模式,增长信心的一个设计模式. 二.简单工厂模式的优缺点 优点:相对于直接在客户端创建对象并初始化对象的值来说,简单工厂模式将创建对象和初始化任

java语言实现结构型设计模式—外观模式

一.描述 外观模式又叫门面模式,就是对一个复杂的系统进行包装,该系统对外的接口统一由外观类提供.当一个复杂的系统需要对外提供接口时,就需要将对外提供的接口统一封装在一个外观类中供外系统使用.外观模式最大的特点就是将细粒度的对象包装成粗粒度的对象,应用程序通过访问这个外观对象来完成细粒度对象的调用.这样应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性. 总的来说,外观模式就是为子系统对外提供的一组接口,这组接口提供一个统一的界面,使得其它

创建型设计模式——工厂模式

简单工厂模式:. 简单的,只有一个工厂类,通过向工厂对象种传参来使工厂判断创建哪个类的对象, 通常通过if.switch语句来实现,由很大的缺点,如果我们再加入要创建的新的类 就必须要更改工厂的源代码才可以使得工厂支持创建这个新的类的对象. shi'yongpackage main import "fmt" type Product interface { print() set(num int) } type Product1 struct { num int } func (it

"围观"设计模式(29)--创建型设计模式总结(单例、工厂、原型、创建者)

设计模式源码下载地址 设计模式源码下载地址 1  单例模式 单例模式,也叫单子模式,是一种常用的软件设计模式.在应用这个模式时,单例对象的类必须保证只有一个实例存在.许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为.比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息.这种方式简化了在复杂环境下的配置管理.----维基百科(WIKIPEDIA) 个人的理解: 单例模式概