package com.example.demo.design;
public class Strategy {
A a;
public Strategy() {
a = new C();
}
public void setA(A a) {
this.a = a;
}
public void logic() {
A a = new B();
if (a != null) {
a.method();
}
}
public static abstract class A {
public abstract void method();
}
public static class B extends A {
@Override
public void method() {
System.out.println("B.impl");
}
}
public static class C extends A {
@Override
public void method() {
System.out.println("C.impl");
}
}
}
package com.example.demo.design;
public abstract class StrategyTemplate {
private String a = getA();
protected String b;
protected abstract String getA();
protected abstract void method1();
protected abstract void method2();
public void method() {
method1();
method2();
}
}
class A extends StrategyTemplate {
@Override
protected String getA() {
return "abc";
}
@Override
protected void method1() {
System.out.println("A.method1()");
}
@Override
protected void method2() {
System.out.println("A.method2()");
}
}
class B extends StrategyTemplate {
@Override
protected String getA() {
return "def";
}
@Override
protected void method1() {
System.out.println("B.method1()");
}
@Override
protected void method2() {
System.out.println("B.method2()");
}
}
class Test {
public static void main(String[] args) {
StrategyTemplate st = new A();
st.method();
st = new B();
st.method();
}
}