Created
November 8, 2019 03:47
-
-
Save zhangsikai123/01c9e409a9a34741d209004c38d3d0ae to your computer and use it in GitHub Desktop.
commons-chain
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package patterns; | |
import java.util.ArrayList; | |
import java.util.List; | |
/** | |
* @author [email protected] | |
* @date 11/8/19 | |
* @description patterns | |
*/ | |
public class StrategyPattern { | |
public static void main(String[] args) { | |
House house = new iGlassHouse(); | |
house.build(); | |
System.out.println("*************"); | |
house = new iWoodenHouse(); | |
house.build(); | |
} | |
} | |
interface Strategy{ | |
void execute(); | |
} | |
class GlassWindowBuilder implements Strategy{ | |
@Override | |
public void execute() { | |
System.out.println("建玻璃窗户"); | |
} | |
} | |
class WoodWindowBuilder implements Strategy{ | |
@Override | |
public void execute() { | |
System.out.println("建木窗户"); | |
} | |
} | |
class GlassPillarBuilder implements Strategy{ | |
@Override | |
public void execute() { | |
System.out.println("建玻璃支柱"); | |
} | |
} | |
class WoodPillarBuilder implements Strategy{ | |
@Override | |
public void execute() { | |
System.out.println("建木支柱"); | |
} | |
} | |
abstract class House { | |
// 有顺序的策略 | |
private List<Strategy> builders = new ArrayList<>(); | |
// template method, final so subclasses can't override | |
abstract void init(); | |
void addBuilder(Strategy builder){ | |
builders.add(builder); | |
} | |
void build(){ | |
this.init(); | |
for(Strategy builder: builders){ | |
builder.execute(); | |
} | |
} | |
} | |
class iWoodenHouse extends House { | |
@Override | |
void init() { | |
this.addBuilder(new WoodPillarBuilder()); | |
this.addBuilder(new WoodWindowBuilder()); | |
} | |
} | |
class iGlassHouse extends House { | |
@Override | |
void init() { | |
this.addBuilder(new GlassPillarBuilder()); | |
this.addBuilder(new GlassWindowBuilder()); | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment