Template Method模式和Strategy模式有何异同

Template Method模式很容易理解,就是由基类提供一个模板,将各子类中不变的行为提取到基类中实现,而各子类中可变的行为则由各子类自己重写基类方法实现.
Strategy则是在使用策略模式的应用实例内部维护一个策略实例,针对不同的子类用不同的策略实现.

来看看两者的代码实现:

Template Method模式 -- 基类

package com.dzeay.pattern.template_method;

public class BaseTemplate {
public void doSameThing() {
System.out.println("BaseTemplate.doSameThing");
}

public void doOtherThing() {
System.out.println("BaseTemplate.BaseTemplate");
}
}


Template Method模式 -- 子类A

package com.dzeay.pattern.template_method;

public class AClass extends BaseTemplate {
@Override
public void doOtherThing() {
System.out.println("AClassImpl.doOtherThing");
}
}


Template Method模式 -- 子类B

package com.dzeay.pattern.template_method;

public class BClass extends BaseTemplate {
@Override
public void doOtherThing() {
System.out.println("BClassImpl.doOtherThing");
}
}


Template Method模式 -- 测试类

package com.dzeay.pattern.template_method;

/**
* <pre>
* Template Method(模板方法模式)详解:
* 由基类提供一个模板,将各子类中不变的行为提取到基类中实现,
* 而各子类中可变的行为由各子类自己重写基类方法实现
* </pre>
*
* @author <a href="mailto:dzeay.com@gmail.com">dzeay.com</a>
* @since 2010-11-15
* @version 1.0
*/
public class TestClass {
/**
*
* @param args
*/
public static void main(String[] args) {
BaseTemplate aClass = new AClass();
aClass.doSameThing();
aClass.doOtherThing();

BaseTemplate bClass = new BClass();
bClass.doSameThing();
bClass.doOtherThing();
}
}


Strategy模式 -- 策略接口

package com.dzeay.pattern.strategy;

public interface IStrategy {
public void doOtherThing();
}


Strategy模式 -- 策略A

package com.dzeay.pattern.strategy;

public class AStrategy implements IStrategy {
@Override
public void doOtherThing() {
System.out.println("AStrategy.doOtherThing");
}
}



Strategy模式 -- 策略B

package com.dzeay.pattern.strategy;

public class BStrategy implements IStrategy {
@Override
public void doOtherThing() {
System.out.println("BStrategy.doOtherThing");
}
}


Strategy模式 -- 应用

package com.dzeay.pattern.strategy;

public class Context {
private IStrategy strategy;

public Context() {

}

public Context(IStrategy strategy) {
this.strategy = strategy;
}

public void doOtherThing() {
this.strategy.doOtherThing();
}

public void setStrategy(IStrategy strategy) {
this.strategy = strategy;
}
}


Strategy模式 -- 测试类

package com.dzeay.pattern.strategy;

/**
* <pre>
* Strategy(策略模式)详解:
* 在使用策略模式的应用实例内部维护一个strategy实例,针对不同的子类用不同的策略实现
* </pre>
*
* @author <a href="mailto:dzeay.com@gmail.com">dzeay.com</a>
* @since 2010-11-15
* @version 1.0
*/
public class TestClass {
/**
* @param args
*/
public static void main(String[] args) {
Context context = new Context();

context.setStrategy(new AStrategy());
context.doOtherThing();

context.setStrategy(new BStrategy());
context.doOtherThing();

context.setStrategy(new IStrategy() {
@Override
public void doOtherThing() {
System.out.println("doOtherThing");
}
});
context.doOtherThing();
}
}


未完待续 ........
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
疫情居家办公系统管理系统按照操作主体分为管理员和用户。管理员的功能包括办公设备管理、部门信息管理、字典管理、公告信息管理、请假信息管理、签到信息管理、留言管理、外出报备管理、薪资管理、用户管理、公司资料管理、管理员管理。用户的功能等。该系统采用了MySQL数据库,Java语言,Spring Boot框架等技术进行编程实现。 疫情居家办公系统管理系统可以提高疫情居家办公系统信息管理问题的解决效率,优化疫情居家办公系统信息处理流程,保证疫情居家办公系统信息数据的安全,它是一个非常可靠,非常安全的应用程序。 管理员权限操作的功能包括管理公告,管理疫情居家办公系统信息,包括外出报备管理,培训管理,签到管理,薪资管理等,可以管理公告。 外出报备管理界面,管理员在外出报备管理界面中可以对界面中显示,可以对外出报备信息的外出报备状态进行查看,可以添加新的外出报备信息等。签到管理界面,管理员在签到管理界面中查看签到种类信息,签到描述信息,新增签到信息等。公告管理界面,管理员在公告管理界面中新增公告,可以删除公告。公告类型管理界面,管理员在公告类型管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值