设计模式之工厂方法实际案例
Posted jinshuaishuai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式之工厂方法实际案例相关的知识,希望对你有一定的参考价值。
这两天在看SpringCloud相关源码,发现里面使用了大量的设计模式,具体的有工厂方法模式,适配器设计模式,装饰设计模式等。
具体的体现是有这样一个接口:DataBuffer,与之对应的有个DataBufferFactory接口,这个接口用于生产DataBuffer对象,看完这两个接口,及其实现,自己模拟这个设计模式,实现了一套工厂方法设计模式:
首先定义一个Animal接口:用于封装动物共有的行为。eat和sleep
public interface Animal
public void eat();
public void sleep();
创建一个AnimalFactory,用于创建生产各种动物的工厂,注意,我这里使用的是创建生产各种动物的工厂,
public interface AnimalFactory
Animal getAnimal();
Animal getAnimal(String name);
Animal getAnimal(String name,String color);
有以下几种动物:
DefaultAnimal,Dog,Bird,都实现Animal,说明DefaultAnimal,Dog,Bird都是Animal的子类,
public class DefaultAnimal implements Animal
private String name;
private String color;
public String getName()
return name;
public void setName(String name)
this.name = name;
public String getColor()
return color;
public void setColor(String color)
this.color = color;
public DefaultAnimal()
super();
public DefaultAnimal(String name)
super();
this.name = name;
public DefaultAnimal(String name,String color)
super();
this.name = name;
this.color = color;
@Override
public void eat()
System.out.println((name == null ? "动物":name)+ "吃肉");
@Override
public void sleep()
System.out.println((name == null ? "动物":name) + "睡觉");
public class Dog implements Animal
private String name;
private String color;
public String getName()
return name;
public void setName(String name)
this.name = name;
public String getColor()
return color;
public void setColor(String color)
this.color = color;
public Dog()
public Dog(String name)
this.name = name;
public Dog(String name, String color)
super();
this.name = name;
this.color = color;
@Override
public void eat()
System.out.println((name == null ? "动物":name)+ "吃肉");
@Override
public void sleep()
System.out.println((name == null ? "动物":name) + "睡觉");
public void lookHome()
System.out.println((name == null ? "动物" : this.name) + "看家");
public class Bird implements Animal
private String name;
private String color;
public String getName()
return name;
public void setName(String name)
this.name = name;
public String getColor()
return color;
public void setColor(String color)
this.color = color;
public Bird()
public Bird(String name)
this.name = name;
public Bird(String name, String color)
super();
this.name = name;
this.color = color;
@Override
public void eat()
System.out.println((name == null ? "动物":name)+ "吃肉");
@Override
public void sleep()
System.out.println((name == null ? "动物":name) + "睡觉");
public void fly()
System.out.println((name == null ? "动物":this.name) + "飞行");
现在,已经有了具体的Animal的实现,也就是说,有了具体的动物,
下面就建造具体的生产动物的工厂,
默认的动物工厂:
public class DefaultAnimalFactory implements AnimalFactory
@Override
public Animal getAnimal()
return new DefaultAnimal();
@Override
public Animal getAnimal(String name)
return new DefaultAnimal(name);
@Override
public Animal getAnimal(String name, String color)
return new DefaultAnimal(name, color);
生产狗的工厂:
public class DogFactory implements AnimalFactory
@Override
public Animal getAnimal()
return new Dog();
@Override
public Animal getAnimal(String name)
return new Dog(name);
@Override
public Animal getAnimal(String name, String color)
return new Dog(name,color);
生产鸟的工厂:
public class BirdFactory implements AnimalFactory
@Override
public Animal getAnimal()
return new Bird();
@Override
public Animal getAnimal(String name)
return new Bird(name);
@Override
public Animal getAnimal(String name, String color)
return new Bird(name,color);
至此:一共创建了生产三种种类动物的工厂,如果客户有需求,想要一条狗对象,那么就可以利用狗工厂,生产一条狗出来,如果客户想要一只猫,ok,那么我们就建造一个猫工厂,用于生产猫,满足客户的需求:CatFactory 实现 AnimalFactory
下面看一个具体的使用:
public class FactoryDemo
public static void main(String[] args)
//生产一个默认的动物
AnimalFactory defaultFactory = new DefaultAnimalFactory();
Animal defaultAnimal = defaultFactory.getAnimal();
defaultAnimal.eat();
//利用狗工厂生产一条狗
AnimalFactory dogFactory = new DogFactory();
Dog dog = (Dog) dogFactory.getAnimal("大黄"); //此处想要调用子类的lookHome方法,所以必须强转为Dog对象
dog.eat();
dog.sleep();
dog.lookHome();
以上是关于设计模式之工厂方法实际案例的主要内容,如果未能解决你的问题,请参考以下文章