Java设计模式2:各个设计模式(模板模式、单例模式、工厂模式、代理模式、装饰器模式、适配器模式、策略模式、观察者模式、迭代器模式)

设计模式可以分为三种:

1、创建型模式

这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。有5种:

工厂模式(Factory Pattern)

抽象工厂模式(Abstract Factory Pattern)

单例模式(Singleton Pattern)

建造者模式(Builder Pattern)

原型模式(Prototype Pattern)

2、结构型模式

这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。有7种:

适配器模式(Adapter Pattern)

桥接模式(Bridge Pattern)

组合模式(Composite Pattern)

装饰器模式(Decorator Pattern)

外观模式(Facade Pattern)

享元模式(Flyweight Pattern)

代理模式(Proxy Pattern)

3、行为型模式

这些设计模式特别关注对象之间的通信。有11种:

责任链模式(Chain of Responsibility Pattern)

命令模式(Command Pattern)

解释器模式(Interpreter Pattern)

迭代器模式(Iterator Pattern)

中介者模式(Mediator Pattern)

备忘录模式(Memento Pattern)

观察者模式(Observer Pattern)

状态模式(State Pattern)

策略模式(Strategy Pattern)

模板模式(Template Pattern)

访问者模式(Visitor Pattern)




一、模板模式(Template Pattern)

模板模式指的是一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。模板模式事实上才是使用得最多的设计模式,几乎所有OOP的代码都会有意无意碰到。我们以来修房子作为一个例子。

public class DesignPattern {
	public static void main(String[] args) {
		BuildHouse flat=new BuildFlat();
		BuildHouse hotel=new BuildHotel();
		flat.build();
		System.out.println();
		hotel.build();
	}
}
abstract class BuildHouse{
	protected void start(){//start和end方法的定义在抽象类中,不需要子类覆盖
		System.out.println("开始建房子啦");
	}
	protected abstract void buildpool();//需要子类覆盖接下来的三个方法。这些方法由于用户不需要调用,只会由子类覆盖,所以protected
	protected abstract void buildwall();
	protected abstract void buildroof();
	protected void end(){
		System.out.println("建完房子啦");
	}
	protected boolean isrich() {//钩子方法。钩子方法一般是在抽象类中实现或者在接口中,可以由子类覆盖。他的作用顾名思义,像一个钩子,决定某些方法能否被执行
		return true;
	}

	final public void build(){//build就是所谓模板方法,他决定了方法的具体执行。也就是说方法的具体执行交给抽象类而不是子类,子类只需要覆盖方法的各个步骤的具体实现
		//由于具体方法的执行是不能被更改的,所以要用final。由于用户要调用他,所以需要public
		this.start();
		if(this.isrich())
			this.buildpool();
		this.buildwall();
		this.buildroof();
		this.end();
	}
}
class BuildFlat extends BuildHouse{
	@Override
	protected void buildpool() {
		System.out.println("建一个公寓游泳池");
	}
	@Override
	protected void buildwall(){
		System.out.println("建一个公寓墙壁");
	}
	@Override
	protected void buildroof(){
		System.out.println("建一个公寓屋顶");
	}
	@Override
	protected boolean isrich(){//建公寓,那肯定没什么钱,那就别建游泳池了
		return false;
	}
}
class BuildHotel extends BuildHouse{
	@Override
	protected void buildpool() {
		System.out.println("建一个酒店游泳池");
	}
	@Override
	protected void buildwall(){
		System.out.println("建一个酒店墙壁");
	}
	@Override
	protected void buildroof(){
		System.out.println("建一个酒店屋顶");
	}
}

优点: 1、封装不变部分,扩展可变部分。 2、提取公共代码,便于维护。 3、行为由父类控制,子类实现。

缺点:每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。

使用场景:1、有多个子类共有的方法,且逻辑相同。 2、重要的、复杂的方法,可以考虑作为模板方法。

二、单例模式(Singleton Pattern)

单例模式是 Java 中最简单的设计模式之一。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值