Skip to content

Instantly share code, notes, and snippets.

@zhangsikai123
Created November 8, 2019 03:47
Show Gist options
  • Save zhangsikai123/01c9e409a9a34741d209004c38d3d0ae to your computer and use it in GitHub Desktop.
Save zhangsikai123/01c9e409a9a34741d209004c38d3d0ae to your computer and use it in GitHub Desktop.
commons-chain
package patterns;
import java.util.ArrayList;
import java.util.List;
/**
* @author sikaizhang@xiaohongshu.com
* @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