package com.sheting.design.pattern.demo8;
/**
* @Author SheTing
* @Time 2018/3/22 9:34
*/
public abstract class HouseTemplate {
//template method, final so subclasses can't override
public final void buildHouse() {
buildFoundation(); // 地基
buildPillars(); //顶梁柱
buildWalls();
buildWindows();
System.out.println("House is built.");
}
//default implementation
private void buildWindows() {
System.out.println("Building Glass Windows");
}
//methods to be implemented by subclasses
public abstract void buildWalls();
public abstract void buildPillars();
private void buildFoundation() {
System.out.println("Building foundation with cement,iron rods and sand");
}
}
package com.sheting.design.pattern.demo8;
/**
* @Author SheTing
* @Time 2018/3/22 9:35
*/
public class WoodenHouse extends HouseTemplate{
@Override
public void buildWalls() {
System.out.println("Building Wooden Walls");
}
@Override
public void buildPillars() {
System.out.println("Building Pillars with Wood coating");
}
}
package com.sheting.design.pattern.demo8;
/**
* @Author SheTing
* @Time 2018/3/22 9:35
*/
public class GlassHouse extends HouseTemplate {
@Override
public void buildWalls() {
System.out.println("Building Glass Walls");
}
@Override
public void buildPillars() {
System.out.println("Building Pillars with glass coating");
}
}
package com.sheting.design.pattern.demo8;
/**
* @Author SheTing
* @Time 2018/3/22 9:36
*/
public class HousingClient {
public static void main(String[] args) {
HouseTemplate houseType = new WoodenHouse();
//using template method
houseType.buildHouse();
System.out.println("************");
houseType = new GlassHouse();
houseType.buildHouse();
}
}
网友评论