码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式之工厂方法实际案例

时间:2019-06-10 13:20:00      阅读:74      评论:0      收藏:0      [点我收藏+]

标签: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!