# 设计模式 第三章 工厂模式
前言
工厂模式为创建者模式的一种,就是创建对象时不会暴露创建
逻辑,提供统一入口来指向新创建的对象。
。
工厂模式三种方法:
1. 简单工厂模式
2. 工厂方法模式
3. 抽象工厂模式
一、简单工厂模式
1.介绍
指定一个参数由一个工厂对象决定创建出不同的类。
2.代码示例
public interface Animal{
void eat();
}
public class Person implements Animal{
@Override
public void eat() {
System.out.println("人吃大米");
}
}
public class Dog implements Animal{
@Override
public void eat() {
System.out.println("狗吃狗粮");
}
}
public class AnimalFactory {
public Animal getAnimal(String type){
if(type== null){
return null;
}
if(type.equalsIgnoreCase("person")){
return new Person();
} else if(type.equalsIgnoreCase("dog")){
return new Dog();
}
return null;
}
}
二、工厂方法模式
1.介绍
定义一个创建对象的抽象方法,由子类决定要实例化的类。
2.代码示例
public interface Animal{
void eat();
}
public class Person implements Animal{
@Override
public void eat() {
System.out.println("人吃大米");
}
}
public class Dog implements Animal{
@Override
public void eat() {
System.out.println("狗吃狗粮");
}
}
public interface AnimalFactory {
public Animal getAnimal();
}
public class PersonFactory implements AnimalFactory{
@Override
public Animal getAnimal(){
return new Person();
}
}
public class DogFactory implements AnimalFactory{
@Override
public Animal getAnimal(){
return new Dog();
}
}
三、抽象工厂模式
1.介绍
定义了一个接口用于创建相关或有依赖关系的对象族,
而不用指明具体的类。简单工厂+工厂方法模式。
3.代码示例
public interface Animal{
void eat();
}
public class Person implements Animal{
@Override
public void eat() {
System.out.println("人吃大米");
}
}
public class Dog implements Animal{
@Override
public void eat() {
System.out.println("狗吃狗粮");
}
}
public interface Colour{
String get();
}
public class Yellow implements Colour{
@Override
public String getColour() {
return "黄色";
}
}
public class Black implements Colour{
@Override
public String getColour() {
return "黑色";
}
}
public interface AnimalFactory {
public Animal getAnimal();
public String getColour();
}
public class YellowPersonFactory implements AnimalFactory{
@Override
public Animal getAnimal(){
return new Person();
}
@Override
public String getColour(){
return new Yellow ().getColour();
}
}
public class BlackDogFactory implements AnimalFactory{
@Override
public Animal getAnimal(){
return new Dog();
}
@Override
public String getColour(){
return new Black().getColour();
}
}