设计模式 Ⅰ

本文详细介绍了设计模式中的简单工厂、工厂方法、抽象工厂、单例、原型、组合和适配器模式,通过实例代码和结构图展示了每种模式的实现和应用场景,帮助读者深入理解设计模式的运用。
摘要由CSDN通过智能技术生成


01. 简单工厂模式

  使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数M,则返回一个Man对象,如果传入参数W,则返回一个Woman对象,请实现该场景。现需要增加一个新的Robot类,如果传入参数R,则返回一个Robot对象,对代码进行修改并注意女娲的变化。

模式结构图

DM01

实现代码

/* 抽象产品类 */
public interface Person {
	public void produce();
}

/* 具体产品类Man */
public class Man implements Person {
	@Override
	public void produce() {
		// TODO Auto-generated method stub
		System.out.println("Nvwa produces a man!");
	}
}

/* 具体产品类Woman */
public class Woman implements Person {
	@Override
	public void produce() {
		// TODO Auto-generated method stub
		System.out.println("Nvwa produce a woman!");
	}
}

/* 具体产品类Robot */
public class Robot implements Person {
	@Override
	public void produce() {
		// TODO Auto-generated method stub
		System.out.println("Nvwa produce a robot!");
	}
}

/* 工厂类 */
public class Nvwa {
	public static Person productPerson(String sex) throws Exception {
		if(sex.equalsIgnoreCase("M")) {
			System.out.println("M is a man!");
			return new Man();
		}
		else if(sex.equalsIgnoreCase("W")) {
			System.out.println("W is a woman!");
			return new Woman();
		}
		else if(sex.equalsIgnoreCase("R")) {
			System.out.println("R is a robot!");
			return new Robot();
		}
		else {
			throw new Exception("NO PRODUCT!");
		}
	}
}

/* 客户端测试类 */
public class Client {
	public static void main(String args[]) {
		try {
			Person person;
			String sex="R";
			person = Nvwa.productPerson(sex);
			person.produce();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			System.out.println(e.getMessage());
		}
	}
}

结果截图

DM01-1
DM01-2
DM01-3


02. 工厂方法模式

  海尔工厂(Haier)生产海尔空调(HaierAirCondition),美的工厂(Midea)生产美的空调(MideaAirCondition) 。使用工厂方法模式描述该场景,绘制类图并编程实现。

模式结构图

DM02

实现代码

/* 抽象工厂类Factory */
public interface Factory {
	public Product produce();
}

/* 具体工厂类Haier */
public class Haier implements Factory {
	@Override
	public Product produce() {
		// TODO Auto-generated method stub
		System.out.println("Haier produces a HaierAirCondition!");
		return new HaierAirCondition();
	}
}

/* 具体工厂类Midea */
public class Midea implements Factory {
	@Override
	public Product produce() {
		// TODO Auto-generated method stub
		System.out.println("Midea produces a MideaAirCondition!");
		return new MideaAirCondition();
	}
}

/* 抽象产品类Product */
public interface Product {
	public void play();
}

/* 具体产品类HaierAirCondition */
public class HaierAirCondition implements Product {
	public void play() {
		// TODO Auto-generated method stub
		System.out.println("It is a HaierAirCondition!");
	}
}

/* 具体产品类MideaAirCondition */
public class MideaAirCondition implements Product {
	public void play() {
		// TODO Auto-generated method stub
		System.out.println("It is a MideaAirCondition!");
	}
}

/* 客户端测试类 */
public class Client {
	public static void main(String[] args) {
		try {
			Factory factory = new Haier();
			factory.produce();
			Product product =new HaierAirCondition();
			product.play();
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println(e.getMessage());
		}
	}
}

结果截图

DM02-1
DM02-2


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值