java抽象使用,使用设计模式改变代码结构

package com.bvlan.test.cases;

import lombok.Data;

import java.util.ArrayList;
import java.util.List;

/**
 * 模式乱用
 *
 * @author tgy
 * @version [版本号, 20190319]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
public abstract class AbstractTest<Component> {
	private static final List<String> APP_NAME_LST = new ArrayList<>();

	public void put(String v) {
		APP_NAME_LST.add(v);
	}

	public static void execute(String appName) {
		if (!APP_NAME_LST.contains(appName)) {
			return;
		}
	}

	public abstract String getName();

	public abstract void start();

	public abstract void stop();
}


class AbSon1 extends AbstractTest<Con1> {
	public static final String APP_NAME = "AAAA";

	AbSon1() {
		super.put(APP_NAME);
	}

	@Override
	public String getName() {
		return APP_NAME;
	}

	@Override
	public void start() {
		Con1 con = new Con1();
		con.setId(1);
		con.setName(APP_NAME);
		con.execute("天下皆白");
		System.out.println("AbSon1 start");
	}

	@Override
	public void stop() {
		System.out.println("AbSon1 stop");
	}

}

@Data
class Con1 extends Component {
	String v1;

	public void execute(String v1) {
		record();
		System.out.println("v1:" + v1);
	}
}

@Data
class Con2 extends Component {
	String v2;

	public void httpReq(String v2) {
		record();
		System.out.println("v2:" + v2);
	}
}

class AbSon2 extends AbstractTest<Con2> {

	public static final String APP_NAME = "BBBB";

	AbSon2() {
		super.put(APP_NAME);
	}

	@Override
	public String getName() {
		return APP_NAME;
	}

	@Override
	public void start() {
		Con2 con = new Con2();
		con.setId(2);
		con.setName(APP_NAME);
		con.httpReq("唯我独黑");
		System.out.println("AbSon2 start");
	}

	@Override
	public void stop() {
		System.out.println("AbSon2 stop");
	}
}

@Data
class Component {
	Integer id;
	String name;

	public String record() {
		StackTraceElement[] stacks = Thread.currentThread().getStackTrace();
		String methodName = stacks[3].getMethodName();
		//做其他的事情
		System.out.println("[" + methodName + "]记录留存:record info id:[" + id + "],name:[" + name + "]");
		return "SUCCESS";
	}
}

class testAb {

	public static void main(String[] args) {
		//这里应当是spring自动注入实例此处new出来
		AbstractTest ab1 = new AbSon1();
		AbstractTest ab2 = new AbSon2();

		ab1.start();
		ab2.start();

		ab1.stop();
		ab2.stop();
	}
}



执行结果如下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值