第四章第二次上机: 面向对象程序设计方法

第四章 面向对象程序设计方法
题目分析
实验目的

  1. 熟悉建模工具。
  2. 掌握简单工厂模式、工厂方法模式、抽象工厂模式,并进行设计应用。
    (1)、 简单工厂模式
    使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数M,则返回一个Man对象,如果传入参数W,则返回一个Woman对象,请实现该场景。现需要增加一个新的Robot类,如果传入参数R,则返回一个Robot对象,对代码进行修改并注意女娲的变化。
    (2)、 工厂方法模式
    海尔工厂(Haier)生产海尔空调(HaierAirCondition),美的工厂(Midea)生产美的空调(MideaAirCondition) 。使用工厂方法模式描述该场景,绘制类图并编程实现。
    (3)、 抽象工厂模式
    电脑配件生产工厂生产内存、CPU等硬件设备,这些内存、CPU的品牌、型号并不一定相同,根据下面的“产品等级结构-产品族”示意图,使用抽象工厂模式实现电脑配件生产过程并绘制相应的类图,绘制类图并编程实现。

算法构造

简单工厂模式

工厂方法模式

抽象工厂模式

算法实现

(一)简单工厂模式

package nvwabulidpeople;

import java.util.Scanner;

public class Start {
public static void main(String[] args) {
Nvwa creator = new Nvwa();
Scanner in=new Scanner(System.in);
String s;
Person p;
s=in.next();
try {
p= creator.create(s);
p.work();
}catch(Exception e)
{

 }
}

  
}

public class Man implements Person{
//实现接口 重载
public void work() {
System.out.println(“男人耕种”);
}

}
public class Woman implements Person{
//实现接口 重载
public void work() {
System.out.println(“女人织布”);
}
}

public class Nvwa {
public Person create(String str) {
if (str.equals(“M”)) {
System.out.println(“女娲造男人中…”);
return new Man();
} else if (str.equals(“W”)) {
System.out.println(“女娲造女人中…”);
return new Woman();
}else if (str.equals(“R”)) {
System.out.println(“女娲造机器人中…”);
return new Robot();
}else {
System.out.println(“这个女娲目前造不了…”);
return null;
}
}
}

public class Robot implements Person {
//实现接口 重载
public void work() {
System.out.println(“机器人思考人生”);
}
}

//定义接口
public interface Person {
public void work();
}
 调试、测试及运行结果

造机器人
造男人
造女人

输入错误时

(二)工厂模式

package airCondition;

import java.util.Scanner;

public class Client {

public static void main(String[] args) {
	Scanner in=new Scanner(System.in);
	String s;
	s=in.next();
		Product p;Factory f;
	try {
	Class c=Class.forName(s);
	    Object obj=c.newInstance();
	   f= (Factory)obj;
	   p=f.createProduct();
	   p.run();
	}catch(Exception e) {
		System.out.println("没有工厂生产这种空调");
	}

}

}
//工厂接口
public interface Factory {
public Product createProduct();
}
//海尔空调工厂
public class Haier implements Factory {

public Product createProduct() {
	System.out.println("海尔工厂正在生产海尔空调...");
	return new HaierAirCondition();
}

}
public class HaierAirCondition implements Product{
//海尔空调类 实现Product接口 重载方法
public void run() {
System.out.println(“海尔空调制冷中…”);
}
}
public class Midea implements Factory {

public Product createProduct() {
	System.out.println("美的工厂正在生产美的空调...");
	return new MideaAirCondition();
}

public class MideaAirCondition implements Product{
//美的空调类 实现Product接口 重载方法
public void run() {
System.out.println(“美的空调制冷中…”);
}
//产品接口
public interface Product {
public void run();
}

 调试、测试及运行结果

海尔空调

美的空调
输入错误
(三)抽象工程模式

import java.util.Scanner;

public class Client {

public static void main(String[] args) {
	// TODO 自动生成的方法存根
	RAM r;
	CPU c;
	Abfactory a;
	String s;
	Scanner in=new Scanner(System.in);
	try {
		s=in.next();
		Class cl=Class.forName(s);
	    Object obj=cl.newInstance();
	   a= (Abfactory)obj;
	   c=a.createCPU();
	  r= a.createRAM();
	  c.cpuRun();
	  r.ramRun();
	}catch(Exception e) {System.out.println("不生产这种牌子的cpu和内存");}
}

}
//建一个抽象工厂接口 定义CPU RAM的生产方法
public interface Abfactory {
public CPU createCPU();
public RAM createRAM();
}
//CPU接口
public interface CPU {
public void cpuRun();
}
public class MacCPU implements CPU {
public void cpuRun() {
System.out.println(“MacCPU运行中…”);
}

}
public class MacFactory implements Abfactory {

public RAM createRAM() {
	System.out.println("Mac工厂正在生产MacRAM...");
	return new MacRAM();
}
public CPU createCPU() {
	System.out.println("Mac工厂正在生产MacCPU...");
	return new MacCPU();
}

}
public class MacRAM implements RAM {

public void ramRun() {
	System.out.println("MacRAM运行中...");
}

}
public class PcCPU implements CPU {

public void cpuRun() {
	System.out.println("PcCPU运行中...");
}

}
public class PcFactory implements Abfactory {

public RAM createRAM() {
	System.out.println("Pc工厂正在生产PcRAM...");
	return new PcRAM();
}
public CPU createCPU() {
	System.out.println("Pc工厂正在生产pcCPU...");
	return new PcCPU();
}

}
public class PcRAM implements RAM {

public void ramRun() {
	System.out.println("PcRAM运行中...");
}

}
//RAM接口
public interface RAM {
public void ramRun();
}

 调试、测试及运行结果
经验归纳
简单工厂模式优点:
实现了对象创建和使用的分离
客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可
通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性
简单工厂模式缺点:
工厂类集中了所有产品的创建逻辑,职责过重,一旦不能正常工作,整个系统都要受到影响
增加系统中类的个数(引入了新的工厂类),增加了系统的复杂度和理解难度
系统扩展困难,一旦添加新产品不得不修改工厂逻辑
由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构,工厂类不能得到很好地扩展
工厂方法模式优点:
工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节
能够让工厂自主确定创建何种产品对象,而如何创建这个对象的细节则完全封装在具体工厂内部
在系统中加入新产品时,完全符合开闭原则
工厂方法模式缺点:
系统中类的个数将成对增加,在一定程度上增加了系统的复杂度,会给系统带来一些额外的开销
增加了系统的抽象性和理解难度
抽象工厂模式优点:
隔离了具体类的生成,使得客户端并不需要知道什么被创建
当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象
增加新的产品族很方便,无须修改已有系统,符合开闭原则
抽象工厂模式缺点:
增加新的产品等级结构麻烦,需要对原有系统进行较大的修改,甚至需要修改抽象层代码,这显然会带来较大的不便,违背了开闭原则

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值