Java面向对象案例-工厂模式
案例要求
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/be8b8855d94abc982581a5b7d7fd88b4.png)
代码实现
定义Shape接口类
package javaclass.shapes;
public interface Shape {
double getArea();
double getPerimeter();
}
定义Graph抽象类并实现Shape接口
package javaclass.shapes;
public abstract class Graph implements Shape{
private double perimeter;
private double area;
@Override
public double getPerimeter() {
return perimeter;
}
public void setPerimeter(double perimeter) {
this.perimeter = perimeter;
}
@Override
public double getArea() {
return area;
}
public void setArea(double area) {
this.area = area;
}
void printSting(){
System.out.println("图形周长 = " + perimeter);
System.out.println("图形面积 = " + area);
};
public int compareArea(Object o) {
Graph graph = (Graph) o;
int compare = 0;
if(this.getArea()>graph.area){
compare=-1;
}else if(this.getArea()<graph.area){
compare=1;
}
return compare;
}
}
创建子类继承Graph类
Circle类
package javaclass.shapes;
public class Circle extends Graph {
private int r=5;
public int getR() {
return r;
}
public void setR(int r) {
this.r = r;
}
@Override
public double getArea() {
return 2*Math.PI*r;
}
@Override
public double getPerimeter() {
return r*r*Math.PI;
}
}
Ellipse类
package javaclass.shapes;
public class Ellipse extends Graph{
private int a=6;
private int b=4;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public int getB() {
return b;
}
public void setB(int b) {
this.b = b;
}
@Override
public double getArea() {
return Math.PI*a*b;
}
@Override
public double getPerimeter() {
return 2*Math.PI*b+4*(a-b);
}
}
Rectangle类
package javaclass.shapes;
public class Rectangle extends Graph {
private int a=6;
private int b=3;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public int getB() {
return b;
}
public void setB(int b) {
this.b = b;
}
@Override
public double getArea() {
return a*b;
}
@Override
public double getPerimeter() {
return (a+b)*2;
}
}
Squere类
package javaclass.shapes;
public class Squere extends Graph {
private int a=8;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
@Override
public double getArea() {
return a*a;
}
@Override
public double getPerimeter() {
return a*4;
}
}
Triangle类
package javaclass.shapes;
public class Triangle extends Graph{
private int sideA=6;
private int sideB=6;
private int sideC=6;
public int getSideA() {
return sideA;
}
public void setSideA(int sideA) {
this.sideA = sideA;
}
public int getSideB() {
return sideB;
}
public void setSideB(int sideB) {
this.sideB = sideB;
}
public int getSideC() {
return sideC;
}
public void setSideC(int sideC) {
this.sideC = sideC;
}
@Override
public double getArea() {
return (sideA*sideB)/2.0;
}
@Override
public double getPerimeter() {
return (sideA+sideB+sideC)*1.0;
}
}
创建GraphFactory工厂类
package javaclass.shapes;
public class GraphFactory {
public Graph getGraph(String graphName){
if ("Triangle".equals(graphName)) {
return new Triangle();
}else if ("Rectangle".equals(graphName)){
return new Rectangle();
}else if ("Squere".equals(graphName)){
return new Squere();
}else if ("Circle".equals(graphName)){
return new Circle();
}else if("Ellipse".equals(graphName)){
return new Ellipse();
}
return null;
}
}
创建Blackboard类,并测试
package javaclass.shapes;
public class Blackboard {
void pring(String name){
GraphFactory factory = new GraphFactory();
Graph graph = factory.getGraph(name);
graph.setArea(graph.getArea());
graph.setPerimeter(graph.getPerimeter());
System.out.println("图形名称 = " + name);
graph.printSting();
}
public static void main(String[] args) {
Blackboard blackboard = new Blackboard();
blackboard.pring("Triangle");
blackboard.pring("Rectangle");
blackboard.pring("Square");
blackboard.pring("Circle");
blackboard.pring("Ellipse");
}
}
ShapeTest类
package javaclass.shapes;
public class ShapeTest {
public static void main(String[] args) {
Graph square = new Square();
square.setArea(square.getArea());
square.setPerimeter(square.getPerimeter());
System.out.println("正方形");
square.printSting();
Graph rectangle = new Rectangle();
rectangle.setArea(rectangle.getArea());
rectangle.setPerimeter(rectangle.getPerimeter());
System.out.println("长方形");
rectangle.printSting();
}
}
运行结果
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/75a0c4a0639e7a22799f18823a7354d5.png)