简单的接口和抽象类实现模板设计模式

一、先使用接口实现模板设计模式

1、先写模板模式中大家公共的方法,将该方法放到一个接口里:

public interface MyPublic {
	
	public void step02();
}

2、写模板类(step01和step03是公共的不变的方法,step02是公共各自需要实现改变的方法,也就需要传入一个实现类对象)

public class MyTemplate {

	public void step01() {
		System.out.println("step01().......");
	}
	
	public void step02(MyPublic myPublic) {
		myPublic.step02();
	}
	
	public void step03() {
		System.out.println("step03().......");
	}
	
	public void step(MyPublic myPublic) {
		this.step01();
		this.step02(myPublic);
		this.step03();
	}
}

3、实现公共的各自实现的方法的接口(哈哈,绕口不,就是实现第一步里MyPublic接口)

public class ImplementsPublic implements MyPublic{

	@Override
	public void step02() {

		System.out.println("step02()~~~~~~~");
	}
}

4、编写各自的类(将模板类作为属性写入)

public class MyStep {

	MyTemplate myTemplate;
		
	public MyTemplate getMyTemplate() {
		return myTemplate;
	}

	public void setMyTemplate(MyTemplate myTemplate) {
		this.myTemplate = myTemplate;
	}

	public static void main(String[] args) {
		
		MyStep myStep = new MyStep();   //new本类的对象
		myStep.setMyTemplate(new MyTemplate());   //给本类的myTemplate属性实例化
		myStep.getMyTemplate().step(new ImplementsPublic());    
        //调用本属性模板里step方法并传入接口以实现的类,按照模板中step方法中的步骤执行	
    }
}	

5、结果

step01().......
step02()~~~~~~~
step03().......

二、使用抽象类实现模板设计模式

1、将公共的一致的方法和需要子类更改的抽象的方法写道一个抽象类里

public abstract class MyTemplate {

	public abstract void step01();
	
	public void step02(){
		
		System.out.println("MyTemplate.step02()");
	}
	
	public void step03(){
		
		System.out.println("MyTemplate.step03()");
	}
	
	public void step(){
	
		step01();
		step02();
		step03();		
	}
}

2、写第一个实现类附加打印的结果

public class Impl01 extends MyTemplate{

	@Override
	public void step01() {
		
		System.out.println("Impl01.step01()");
	}
	
	public static void main(String[] args) {
		Impl01 impl01 = new Impl01();
		impl01.step();
	}
}

Impl01.step01()
MyTemplate.step02()
MyTemplate.step03()

3、写第二个实现类附加打印的结果

public class Impl02 extends MyTemplate{

	@Override
	public void step01() {

		System.out.println("Impl02.step01()");
	}
	
	public static void main(String[] args) {
		
		Impl02 impl02 = new Impl02();
		impl02.step();
	}
}

Impl02.step01()
MyTemplate.step02()
MyTemplate.step03()

这样就实现了由抽象的父类作为模板,里面包含了变与不变的方法,需要改变的方法就写成抽象类,交给继承的子类来完成实现,不变的方法就直接书写方法体,交给子类继承,而且方法的具体执行流程也写在了模板父类里,这样,各个子类一是要实现需要按照自己的步骤执行抽象方法,并按照父类的执行流程执行即可,这样便体现了模板方法设计模式。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
接口抽象类设计模式中发挥着不同的作用。接口主要用于定义一组相关的操作,而不关心具体的实现细节。它提供了一种规范,让不同的类可以实现这些操作,并且可以通过接口类型来统一对待这些类。这种设计模式被称为接口隔离原则,它可以提高代码的灵活性和可扩展性。例如,适配器模式就是使用接口来适配类的接口,从而实现不同类之间的兼容性\[2\]。 抽象类则更多地关注于共享的行为和属性。它可以包含一些具体的实现,同时也可以定义一些抽象的方法,让子类来实现抽象类提供了一种模板方法设计模式,它可以定义一个算法的骨架,而将具体的实现细节延迟到子类中。这种设计模式被称为模板方法模式,它可以提高代码的复用性和可维护性。抽象类在多层的应用程序开发过程中扮演着重要的角色,它可以作为一个基类,为子类提供一些通用的行为和属性\[3\]。 总结起来,接口抽象类都是在设计模式中发挥作用的重要概念。接口主要用于定义一组相关的操作,提供了一种规范和兼容性的机制;而抽象类则更多地关注于共享的行为和属性,提供了一种模板方法设计模式。它们在不同的场景中有不同的应用,但都可以提高代码的可扩展性和可维护性。 #### 引用[.reference_title] - *1* *2* *3* [设计模式接口设计模式](https://blog.csdn.net/weixin_45500205/article/details/126175707)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值