一些设计模式的感想(下)

本篇简单描述7个设计模式,分别是:工厂模式(Factory Pattern),抽象工厂模式(Abstract Factory Pattern),代理模式(Proxy Pattern),观察者模式(Observer Pattern),访问者模式(Visitor Pattern),状态模式(State Pattern),备忘录模式(Memento Pattern)

1.工厂模式(Factory Pattern)

工厂模式是 Java 中最常用的设计模式之一。通过使用工厂模式,我们可以在不对客户端暴露代码内部逻辑的情况下使用一个共同的新接口来创建新的对象。
作用:将对象的创建延迟到创建对象的接口子类里,通过调用工厂类进行
优点:调用者只需知道想要创建对象的名字即可进行对象的创建,无需暴露代码内部逻辑,并且这样的代码可扩展性高,只需添加一个新的工厂类即可支持一个新对象的创建
缺点:增加了程序的复杂度
示例:

public interface Vehicle {
	public void trans();
}
public class Plane implements Vehicle {
	@Override
	public void trans() {
		System.out.println("飞机在天上");
	}
}
public class Train implements Vehicle {
	@Override
	public void trans() {
		System.out.println("火车在地上");
	}
}
public class Ship implements Vehicle {
	@Override
	public void trans() {
		System.out.println("轮船在海上");
	}
}
public class VehicleFactory {
	public Vehicle GetVehicle(String vehicleType)
	{
		if(vehicleType == null)
			return null;
		else if(vehicleType == "Plane")
			return new Plane();
		else if(vehicleType == "Train")
			return new Train();
		else if(vehicleType == "Ship")
			return new Ship();
		return null;
	}
}

测试:

public class TestFactory {
	@Test
	public void testFacade()
	{
		VehicleFactory factory = new VehicleFactory();
		Vehicle vehicle1 = factory.GetVehicle("Plane");
		vehicle1.trans();
		Vehicle vehicle2 = factory.GetVehicle("Train");
		vehicle2.trans();
		Vehicle vehicle3 = factory.GetVehicle("Ship");
		vehicle3.trans();
	}
}

结果:
在这里插入图片描述

2.抽象工厂模式(Abstract Factory Pattern)public class TestAbstractFactory {

抽象工厂模式是通过一个超级工厂创建其他工厂,每个被创建的工厂都能按照工厂模式创建对象。
作用:可以方便不同种类的多种对象的创建。
优点:可以保证客户端对对象的创建保持在同一种类
缺点:不易于扩展
示例:

public interface Vehicle {
	public void trans();
}
public class Plane implements Vehicle {
	@Override
	public void trans() {
		System.out.println("飞机在天上");
	}
}
public class Train implements Vehicle {
	@Override
	public void trans() {
		System.out.println("火车在地上");
	}
}
public class Ship implements Vehicle {
	@Override
	public void trans() {
		System.out.println("轮船在海上");
	}
}
public interface BoardGame {
	public void play();
}
public class ChessGame implements BoardGame {
	@Override
	public void play() {
		System.out.println("这是象棋游戏");
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值