Java设计模式之工厂方法模式

前言

java有23中设计模式。设计模式在Java编程里面用处非常的多,如果把开发一个项目比喻成盖房子,在盖房子的过程中不同的位置需要不同的设计方式,如果设计的好,房子会更耐用更美观。在开发过程中有时就要引入设计模式,让代码可重用,保证代码可靠性,提高开发效率等。

介绍

工厂方法模式:顾名思义,类似于一个工厂对不同的产品进行加工,然后分配给需要该产品的商家。

步骤

第一步:创建抽象产品类People

package com.Plant;

/**
 * 定义一个抽象工厂类
 */
public abstract class People {
    protected String position;//职位

    private String name;//姓名
    private int age;//年龄

    public String getName() { return name; }

    public int getAge() { return age; }

    public void setName(String name) {this.name = name; }

    public void setAge(int age) { this.age = age; }

    public People() {    }

    public People(String position, String name, int age) {
        this.position = position;
        this.name = name;
        this.age = age;
    }

    public void sleep(){
        System.out.println("一位"+this.age+"岁的"+this.position+"他的姓名为"+this.name+"正在睡觉!");
    }


    public abstract void job();//定义一个抽象方法
}

第二步: 创建具体产品类

创建一个Student类继承People类,并且实现People的抽象方法。   

package com.Plant;

/**
 * 学生类
 */
public class Student extends People {
    public Student() {  this.position="学生";  }

    public Student(String name, int age) {
        super("学生", name, age);
    }

    public void show(){
        System.out.println("啊?"+this.getName()+"考了100分。");
    }
    @Override
    public void job() {
        System.out.println(this.getName()+"今年"+this.getAge()+"岁"+"他的工作是学习。");
    }
}

创建一个Teacher类继承People类,并且实现People的抽象方法。   

package com.Plant;

/**
 * 老师类
 */
public class Teacher extends People {
    public Teacher() {  this.position="老师"; }
    public Teacher(String name, int age) {
        super("老师", name, age);
    }
    public void tell(Student student){
        System.out.println(this.getName()+"正在跟他的学生"+student.getName()+"讲道理,为什呢,因为"+student.getName()+"比较皮!");
    }
    @Override
    public void job() {
        System.out.println(this.getName()+"今年"+this.getAge()+"岁"+"他的工作是教书。");
    }
}

创建一个Program类继承People类,并且实现People的抽象方法。

package com.Plant;

/**
 * 程序员类
 */
public class Programmer extends People {
    public Programmer() { this.position="程序员"; }
    public Programmer(String name, int age) {
        super("程序员", name, age);
    }
    public void WorkOverTime(){//加班的方法(你懂的!!!)
        System.out.println(this.getAge()+"岁"+"苦逼"+this.position+this.getName()+"正在疯狂加班!!!!");
    }
    @Override
    public void job() {
        System.out.println(this.getName()+"今年"+this.getAge()+"岁"+"他的工作是打代码。");
    }
}

第三步:创建工厂类Plant

package com.Plant;

/**
 * 工厂类:根据特定的职位返回对应的的类
 */
public class Plant {
    public static People getInsent(String position){//定义一个static方法 根据你传入的参数 返回特定的对象
        if(position.equals("学生"))
            return new Student();             //因为Student类是继承People 可以直接返回Student的匿名对象
        if(position.equals("老师"))
            return new Teacher();
        if(position.equals("程序员"))
            return new Programmer();
        return null;
    }
}

第四步:通过调用创建工厂类来创建不同的实例

package com.Plant;

public class Main {

    public static void main(String[] args) {
        //程序员
        People people=Plant.getInsent("程序员");
        people.setAge(20);                    //赋值
        people.setName("老仨");               
        people.job();                         //不能直接people.WorkOverTime()方法
        Programmer programmer=null;           //因为People类中没有WorkOverTime方法
        if(people instanceof Programmer)
            programmer=(Programmer)people;     //因此需要 向下转型
        programmer.WorkOverTime();

        System.out.println("");
        //学生
        people=Plant.getInsent("学生");
        people.setAge(20);
        people.setName("熊X");
        people.job();
        people.sleep();
        Student student=null;
        if(people instanceof Student)
            student=(Student)people;
        student.show();

        System.out.println("");
        //老师
        people=Plant.getInsent("老师");
        people.setName("杨老师");
        people.setAge(28);
        people.job();
        Teacher teacher=null;
        if (people instanceof Teacher)
            teacher=(Teacher)people;
        teacher.tell(student);
    }
}

运行结果:


总结:由上面代码可看出,在工厂方法设计模式中。一直反复的用到面向对象的编程思想,即:1.封装:使代码模块化,安全性更高。2.继承:使代码可重用,减少一部分代码量。3.多态:一个接口,多种状态,让代码变得更灵活。


每日鸡汤:如果你每天感觉很累,那就对了,因为舒服是留给死人的!


Over !




  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园2.0是高校信息化建设的新阶段,它面对着外部环境变化和内生动力的双重影响。国家战略要求和信息技术的快速发展,如云计算、大数据、物联网等,为智慧校园建设提供了机遇,同时也带来了挑战。智慧校园2.0强调以服务至上的办学理念,推动了教育模式的创新,并对传统人才培养模式产生了重大影响。 智慧校园建设的解决之道是构建一个开放、共享的信息化生态系统,利用互联网思维,打造柔性灵活的基础设施和强大的基础服务能力。这种生态系统支持快速迭代的开发和持续运营交付能力,同时注重用户体验,推动服务创新和管理变革。智慧校园的核心思想是“大平台+微应用+开放生态”,通过解耦、重构和统一运维监控,实现服务复用和深度融合,促进业务的快速迭代和自我演化。 智慧校园的总体框架包括多端协同,即“端”,它强调以人为中心,全面感知和捕获行为数据。这涉及到智能感知设备、超级APP、校园融合门户等,实现一“码”或“脸”通行,提供线上线下服务端的无缝连接。此外,中台战略是智慧校园建设的关键,包括业务中台和数据中台,它们支持教育资源域、教学服务域等多个领域,实现业务的深度融合和数据的全面治理。 在技术层面,智慧校园的建设需要分期进行,逐步解耦应用,优先发展轻量级应用,并逐步覆盖更多业务场景。技术升级路径包括业务数据化、数据业务化、校园设施智联化等,利用IoT/5G等技术实现设备的泛在互联,并通过人工智能与物联网技术的结合,建设智联网。这将有助于实现线上线下一网通办,提升校园安全和学习生活体验,同时支持人才培养改革和后勤管理的精细化。 智慧校园的建设不仅仅是技术的升级,更是对教育模式和管理方式的全面革新。通过构建开放、共享的信息化生态系统,智慧校园能够更好地适应快速变化的教育需求,提供更加个性化和高效的服务,推动教育创新和人才培养的高质量发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值