巧用模板模式和工厂模式简化开发工作

本文通过Java代码实例,探讨如何使用接口和抽象类实现角色模板,如动物本能、普通人和公务员的不同行为。通过继承和实现AnimalInstinct接口,展示了角色间的共性和差异,强调了代码复用和模块化的编程原则。
摘要由CSDN通过智能技术生成

前言

在业务中经常会遇到根据switch或if判断来走不同的流程。

如果这些流程中有相似性,我们可以将它封装为接口,然后构建不同的类去调用。

过程

举个例子:比如我们大家可能都是人,在这个喧嚣而又复杂的社会中扮演着不同的角色。有的人是老板、有的是公务员,但大多数都是普通人。管你是什么人,你都要吃饭和玩,这是所有生物的本能呢。

所以就有了一个动物本能的接口,所有动物都具有该功能

/**
 * 动物本能
 *
 * @author MinWeikai
 * @date 2021/6/5 11:29
 */
public interface AnimalInstinct {

    void play();

    void eat();
}

而我们人类的生活就是不断的思考、体会人生和做我们开心的事

/**
 * 人也具有动物的本能
 *
 * @author MinWeikai
 * @date 2021/6/5 11:30
 */
public abstract class AbstractPerson implements AnimalInstinct {

    protected String name = "所有人";

    protected abstract void think();

    void life(String name){
        this.name = name;
        this.think();
        this.happy();
    }

    void happy() {
        this.eat();
        this.play();
    }
}

社会中人类扮演的每种角色都具有相同的功能,但具体实现又各不相同

/**
 * 具体的公务员
 *
 * @author MinWeikai
 * @date 2021/6/5 11:33
 */
public class CivilServant extends AbstractPerson {
    @Override
    protected void think() {
        System.out.println(name +"一切为了人民!");
    }

    @Override
    public void play() {
        System.out.println(name +"玩游戏");
    }

    @Override
    public void eat() {
        System.out.println(name +"吃皇粮");
    }
}
/**
 * 具体的普通人
 *
 * @author MinWeikai
 * @date 2021/6/5 11:33
 */
public class AveragePerson extends AbstractPerson {
    @Override
    protected void think() {
        System.out.println(name +"今天要搬砖还是躺平?");
    }

    @Override
    public void play() {
        System.out.println(name +"玩游戏");
    }

    @Override
    public void eat() {
        System.out.println(name +"吃烧烤");
    }
}

不论是什么角色,在社会这个大工厂中,大众对他们就是刻板印象

你是averagePerson=普通人,那就是属于AveragePerson角色

/**
 * 人类角色工厂
 *
 * @author MinWeikai
 * @date 2021/6/5 12:12
 */
public class AbstractPersonFactory {

    static Map<String, AbstractPerson> personMap = new HashMap<>();

    static {
        personMap.put("averagePerson", new AveragePerson());
        personMap.put("civilServant", new CivilServant());
    }

    public static AbstractPerson getPerson(String character) throws Exception {
        return Optional.ofNullable(personMap.get(character)).orElseThrow(Exception::new);
    }
}

人们看到你这个角色,就知道你是什么人

/**
 * @author MinWeikai
 * @date 2021/6/5 12:17
 */
public class AbstractPersonFactoryTest {

    public static void main(String[] args) throws Exception {
        AbstractPerson averagePerson = AbstractPersonFactory.getPerson("averagePerson");
        averagePerson.life("张伟");

    }
}

大众认知中该角色的张伟

Connected to the target VM, address: '127.0.0.1:56191', transport: 'socket'
张伟今天要搬砖还是躺平?
张伟吃烧烤
张伟玩游戏
Disconnected from the target VM, address: '127.0.0.1:56191', transport: 'socket'

Process finished with exit code 0

总结

由上述代码可以看出只要继承了该抽象类AbstractPerson,都要实现think()、play()、eat()方法,这也是所有人的生活,人类的悲欢都是相通的。

具有相同属性和行为,可用模板代码实现。

未来又有新的角色诞生,他还是要继承AbstractPerson,然后在社会这个工厂里注册他的角色。

在动物本能类中AnimalInstinct具有相同功能都应实现该类,如抽象猪、抽象狗等。

使用以上模式可以将类似类、类似功能代码不断地封装。易于维护,使用者无需关心方法的调用,只需继承对应的抽象类、关心自己角色的实现即可。

代码

上述代码路径

本文由博客群发一文多发等运营工具平台 OpenWrite 发布

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值