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

1.    工厂方法模式

1.1. 概述

工厂方法模式中抽象工厂类负责定义创建对象的接口,具体对象的创建工作由继承抽象工厂的具体类实现。

1.2. 优点

  • 增强系统的扩展性

客户端不需要在负责对象的创建,从而明确了各个类的职责,如果有新的对象增加,只需要增加一个具体的类和具体的工厂类即可,不影响已有的代码,后期维护容易,增强了系统的扩展性

1.3. 缺点

  • 需要额外的编写代码,增加了工作量

2.    代码

  • 工厂接口:Factory.java
package cn.itcast_02;

public interface Factory {
	public abstract Animal createAnimal();
}
  • 动物抽象类:Animal.java
package cn.itcast_02;

public abstract class Animal {
	public abstract void eat();
}
  • 具体工厂类-狗:DogFactory.java
package cn.itcast_02;

public class DogFactory implements Factory {

	@Override
	public Animal createAnimal() {
		return new Dog();
	}
}
  • 具体狗类:Dog.java
package cn.itcast_02;

public class Dog extends Animal {

	@Override
	public void eat() {
		System.out.println("狗吃肉");
	}
}
  • 具体工厂类-猫:CatFactory.java
package cn.itcast_02;

public class CatFactory implements Factory {

	@Override
	public Animal createAnimal() {
		return new Cat();
	}
}
  • 具体猫类:Cat.java
package cn.itcast_02;

public class Cat extends Animal {

	@Override
	public void eat() {
		System.out.println("猫吃鱼");
	}
}
  • 测试类:AnimalDemo.java
package cn.itcast_02;

public class AnimalDemo {
	public static void main(String[] args) {
		// 需求:我要买只狗
		Factory f = new DogFactory();
		Animal a = f.createAnimal();
		a.eat();
		System.out.println("-------");

		//需求:我要买只猫
		f = new CatFactory();
		a = f.createAnimal();
		a.eat();
	}
}
时间: 2024-11-02 00:59:56

Java设计模式——工厂方法模式的相关文章

JAVA设计模式--工厂方法模式

工厂方法设计模式 抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关.是具体工厂角色必须实现的接口或者必须继承的父类.在java中它由抽象类或者接口来实现.具体工厂角色:它含有和具体业务逻辑有关的代码.由应用程序调用以创建对应的具体产品的对象.在java中它由具体的类来实现.抽象产品角色:它是具体产品继承的父类或者是实现的接口.在java中一般有抽象类或者接口来实现.具体产品角色:具体工厂角色所创建的对象就是此角色的实例.在java中由具体的类来实现. 下面以IE,火狐,谷歌浏览器为模型做

Java设计模式—工厂方法模式&抽象工厂模式

工厂方法模式与抽象工厂模式都是设计模式中重要而且常见的模式.       工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 通用类图如下: 在工厂方法模式中,抽象产品类Product负责定义产品的共性,实现对事物最抽象的定义:Creator为抽象创建 类,也就是抽象工厂,具体如何创建产品类是由具体的实现工厂ConcreteCreator完成的. 工厂方法模式的扩展方式有很多种,下边是工厂方法模式一个比较实用的源代码: 抽象产品类: pub

《转》java设计模式--工厂方法模式(Factory Method)

本文转自:http://www.cnblogs.com/archimedes/p/java-factory-method-pattern.html 工厂方法模式(别名:虚拟构造) 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method使一个类的实例化延迟到其子类. 概述 当系统准备为用户提供某个类的子类的实例,又不想让用户代码和该子类形成耦合时,就可以使用工厂方法模式来设计系统.工厂方法模式的关键是在一个接口或抽象类中定义一个抽象方法,该方法返回某个类的子类的实例,该

Java设计模式-工厂方法模式和抽象工厂模式

工厂方法模式定义: 即定义一个创建对象的接口(即抽象工厂类),让其子类(具体工厂类)决定实例化哪一个类(具体产品类)."一对一"的关系 1,一抽象工厂类派生出多个具体工厂类: 2,一抽象产品类派生出多个具体产品类: 3,每个具体工厂类只能创建一个具体产品类的实例. UML图: 角色模块: 1,抽象工厂类:工厂方法模式的核心,定义一个创建对象的接口 2,具体工厂类:继承抽象工厂类,实现其工厂方法,实现具体业务逻辑 3,抽象产品类:是工厂方法模式所创建的产品的父类 4,具体产品类:实现抽象

Java设计模式-工厂方法模式(Factory Method)

工厂方法模式(Factory Method) 工厂模式适合:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建.在以下的三种模式中,第一种如果传入的字符串有误,不能正确创建对象,第三种相对于第二种,不需要实例化工厂类,所以,大多数情况下,我们会选用第三种——静态工厂方法模式. 1:普通工厂模式 就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建 例,按下图写一个普通工厂方法模式 首先,创建共同接口sender public interface Sender

Java设计模式——工厂方法模式(factory method)

工厂方法模式是类的创建模式,用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中. 相信很多人都做过导入导出功能,就拿导出功能来说.有这么一个需求:某一个系统需要支持对数据库中的员工薪资进行导出,并且支持多种格式如:HTML.Excel.PDF等,每种格式导出的结构有所不同,比如:财务跟其他人对导出薪资的HTML格式要求可能会不一样,因为财务可能需要特定的格式方便核算或其他用途.如果使用简单工厂模式,则工厂类必定过于臃肿.因为简单工厂模式只有一个工厂类,它需要处理所有的创建的逻辑.假

Java设计模式-工厂方法模式(Virtual Constructor/Polymorphic Factory)

工厂方法模式(Virtual Constructor/Polymorphic Factory) 工厂方法模式是类的创建模式,又叫做虚拟构造子模式(Virtual Constructor)或者多态性工厂模式(Polymorphic Factory). 工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中. 那么工厂方法模式是在什么场景下使用呢?下面就举例说明: 相信很多人都做过导入导出功能,就拿导出功能来说.有这么一个需求:XX系统需要支持对数据库中的员工薪资进行导出,并

我的Java设计模式-工厂方法模式

转载 https://zhuanlan.zhihu.com/p/29549253 原文地址:https://www.cnblogs.com/thiaoqueen/p/8298328.html

Python设计模式——工厂方法模式(FactoryMethod)

需求:有一个学雷锋活动,有买米和扫地两个内容,参与的人有大学生和社区志愿者,他们各自的方法不一样. 如果用简单工厂模式实现: #encoding=utf-8 __author__ = '[email protected]' class LeiFeng(): def buy_rice(self): pass def sweep(self): pass class Student(LeiFeng): def buy_rice(self): print '大学生帮你买米' def sweep(self