工厂 / 抽象工厂模式

工厂方法使用继承:把对象的创建委托给子类,子类实现工厂方法来创建对象。

抽象工厂使用对象组合:对象的创建被实现在工厂接口所暴露出来的方法中。

工厂方法demo:

interface Shape {
    void draw();
}

class Circle implements Shape {
    @Override
    void draw() {

    }
}

class Square implements Shape {
    @Override
    void draw() {

    }
}

class Rectangle implements Shape {
    @Override
    void draw() {

    }
}

class ShapeFactory {
    Shape shape = null;

    // 工厂根据需求生成子类对象,但是返回的接口是统一的,
    // 都是以父类接口返回
    public Shape getShape(String type) {
        if (type.equals("CIRCLE")) {
            shape = new Circle();
        } 
        if (type.equals("RECTANGLE")) {
            shape = new Rectangle();
        } 
        if (type.equals("SQUARE")) {
            shape = new Square();
        } 
        return shape;
    }
}

class FactoryPatternDemo {
    public static void main(String[] args) {
        ShapeFactory shapeFactory = new ShapeFactory();
        
        // 直接提需求,扔给工厂去做,而不需要关心内部细节
        Shape shape1 = shapeFactory.getShape("CIRCLE");
        shape1.draw();
        
        Shape shape2 = shapeFactory.getShape("RECTANGLE");
        shape2.draw();

        Shape shape3 = shapeFactory.getShape("SQUARE");
        shape3.draw();
    }
}

这些类的UML图为:
在这里插入图片描述
抽象工厂demo

interface Shape {
   void draw();
}

class Rectangle implements Shape {
 
   @Override
   public void draw() {
      
   }
}

class Square implements Shape {
 
   @Override
   public void draw() {
      
   }
}

public class Circle implements Shape {
 
   @Override
   public void draw() {
      
   }
}

interface Color {
   void fill();
}

class Red implements Color {
 
   @Override
   public void fill() {
      
   }
}

class Green implements Color {
 
   @Override
   public void fill() {
      
   }
}

class Blue implements Color {
 
   @Override
   public void fill() {
      
   }
}

abstract class AbstractFactory {
    public abstract Color getColor(String color);
    public abstract Shape getShape(String shape);
}

class ColorFactory extends AbstractFactory {
    @Override
    public Color getColor(String color) {
        if (color == null) {
            return null;
        }
        if (color.equals("RED")) {
            return new Red();
        }
        if (color.equals("GREEN")) {
            return new Green();
        }
        if (color.equals("BLUE")) {
            return new Blue();
        }
    }

    @Override
    public Shape getShape(String shape) {
        return null;
    }
}

class ShapeFactory extends AbstractFactory {
    @Override
    public Color getShape(String shape) {
        if (shape == null) {
            return null;
        }
        if (shape.equals("CIRCLE")) {
            return new Circle();
        }
        if (shape.equals("RECTANGLE")) {
            return new Rectangle();
        }
        if (shape.equals("SQUARE")) {
            return new Square();
        }
    }

    @Override
    public Shape getColor(String color) {
        return null;
    }
}


class FactoryProducer {
    public static AbstractFactory getFactory(String type) {
        if (type.equals("SHAPE")) {
            return new shapeFactory();
        } else if (type.equals("COLOR")) {
            return new colorFactory();
        }
        return null;
    }
}

class AbstractFactoryPatternDemo {
    public static void main(String[] args) {
        
        AbstractFactory shapeFactory = FactoryProducer.getFactory("SHAPE");

        Shape shape1 = shapeFactory.getShape("CIRCLE");
        shape1.draw();

        Shape shape2 = shapeFactory.getShape("RECTANGLE");
        shape2.draw();

        Shape shape3 = shapeFactory.getShape("SQUARE");
        shape3.draw();

        AbstractFactory colorFactory = FactoryProducer.getFactory("COLOR");

        Color color1 = colorFactory.getColor("RED");
        color1.fill();

        Color color2 = colorFactory.getColor("GREEN");
        color2.fill();

        Color color3 = colorFactory.getColor("BLUE");
        color3.fill();

    }
} 

UML图:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校园悬赏任务平台对字典管理、论坛管理、任务资讯任务资讯公告管理、接取用户管理、任务管理、任务咨询管理、任务收藏管理、任务评价管理、任务订单管理、发布用户管理、管理员管理等进行集中化处理。经过前面自己查阅的网络知识,加上自己在学校课堂上学习的知识,决定开发系统选择小程序模式这种高效率的模式完成系统功能开发。这种模式让操作员基于浏览器的方式进行网站访问,采用的主流的Java语言这种面向对象的语言进行校园悬赏任务平台程序的开发,在数据库的选择上面,选择功能强大的Mysql数据库进行数据的存放操作。校园悬赏任务平台的开发让用户查看任务信息变得容易,让管理员高效管理任务信息。 校园悬赏任务平台具有管理员角色,用户角色,这几个操作权限。 校园悬赏任务平台针对管理员设置的功能有:添加并管理各种类型信息,管理用户账户信息,管理任务信息,管理任务资讯公告信息等内容。 校园悬赏任务平台针对用户设置的功能有:查看并修改个人信息,查看任务信息,查看任务资讯公告信息等内容。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。项目管理页面提供的功能操作有:查看任务,删除任务操作,新增任务操作,修改任务操作。任务资讯公告信息管理页面提供的功能操作有:新增任务资讯公告,修改任务资讯公告,删除任务资讯公告操作。任务资讯公告类型管理页面显示所有任务资讯公告类型,在此页面既可以让管理员添加新的任务资讯公告信息类型,也能对已有的任务资讯公告类型信息执行编辑更新,失效的任务资讯公告类型信息也能让管理员快速删除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值