标签:main 方法 动物 inter new default home font color
这两天在看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();
}
}
标签:main 方法 动物 inter new default home font color
原文地址:https://www.cnblogs.com/jinshuaishuai/p/10997023.html