实验二:工厂模式(简单工厂方法)
(1)UML设计图
(2)核心实现代码
1)Shape接口
接口中有draw()和erase()两个方法,供对象类覆写
public interface Shape { abstract String draw(); abstract String erase(); } |
2)Creator工厂类
public class Creator { public static Shape factory(String option){ Shape shape = null; if(option.compareTo("circle")==0){ shape = new Circle(); } else if(option.compareTo("rectangle")==0){ shape = new Rectangle(); } else if(option.compareTo("triangle")==0){ shape = new Triangle(); } return shape; } } |
3)Circle类
public class Circle implements Shape{ public String draw() { return "绘制圆形!"; } public String erase() { return "擦除圆形!"; } } |
4)Rectangle类
public class Rectangle implements Shape{ Public String draw() { return "绘制方形!"; } public String erase() { return "擦除方形!"; } } |
5)Triangle类
public class Triangle implements Shape{ public String draw() { return "绘制三角形!"; } public String erase() { return "擦除三角形!"; } } |
(4)心得体会
这次做的实验是工厂模式中最基础的部分——简单工厂模式,它是利用一个Creator来负责实例化对象,这样就可以简化了应用程序,应用程序本身不再含有大量的条件语句判定何时选取哪个类,这样大大增加了程序的可读性,而且我们也可以更好地管理程序功能,程序的层次更加明确。
当然,由于这只是个基本的工厂模式,这并不符合程序的开闭原则,这就需要我们更进一步学习工厂模式和抽象工厂模式,这都需要以基本的工厂模式为基础才能完成,所以这次的实验是非常重要和必要的,只有做好了这次的实验,才能继续完成下面更加复杂的模型。更能让我们了解到设计模式的重要性,让我受益匪浅!
实验二:工厂模式(工厂方法模式)
(1) UML设计图
(2) 核心实现代码
1)保险类接口
接口中有getInfo()供对象类覆写
public interface AutoInsurance { abstract String getInfo(); } |
2) BodyInjur类
public class BodyInjur implements AutoInsurance{ private String description; public String getInfo(){ description = "驾驶员事故中受伤"; return description; } } |
3) Collsion类
public class CarDamage implements AutoInsurance{ String description; public String getInfo(){ description = "车辆损坏的损失"; return description; } } |
4) PersonInjur类
public class BodyInjur implements AutoInsurance{ private String description; public String getInfo(){ description = "驾驶员事故中受伤"; return description; } } |
5) Other类
public class Other implements AutoInsurance{ String description; public String getInfo(){ description = "其他事故导致"; return description; } } |
6)Creator接口
public interface Creator { public AutoInsurance getInsurObj(); } |
7)BodyPolicy类
public class BodyPolicy implements Creator{ Public AutoInsurance getInsurObj(){ return new BodyInjur(); } } |
8)CarPolicy类
public class CarPolicy implements Creator{ public AutoInsurance getInsurObj(){ return new CarDamage(); } } |
9)PersonPolicy类
public class PersonPolicy implements Creator{ public AutoInsurance getInsurObj(){ return new PersonInjur(); } } |
10)OtherPolicy类
public class OtherPolicy implements Creator{ public AutoInsurance getInsurObj(){ return new Other(); } } |
(5)心得体会
工厂模式是为了克服简单工厂方法模式的缺点,使工厂模式符合开闭原则,每当有一个新的产品类被加入到产品类的结构当中,只需要加入对应的类,而不需要增加新的条件语句,这样就能更好地管理代码和让代码的可读性增强;从做过的简单工厂之中再做工厂模式,就可以深刻地发现两种方法的不同之处,工厂方法将创建对象的逻辑与任务交给了工厂类。
通过这次实验,使我更能深刻体会创建型设计模式的结构,也为后面学习范围更大的抽象工厂模式埋下伏笔。
实验二:工厂模式(抽象工厂模式)
(1) UML设计图
(2) 核心实现代码
BodyInjur接口
接口中有getInfo()供对象类覆写
public interface BodyInjur { public String getInfo(); } |
2) CarDamage接口
public interface CarDamage { public String getInfo(); } |
3) PersonInjur接口
public interface PersonInjur { public String getInfo(); } |
4) Other接口
public interface Other { public String getInfo(); } |
5) PiccBodyInjur类
public class PiccBodyInjur implements BodyInjur{ public String getInfo() { return "中国人寿保险:司机受伤!"; } } |
6) PinAnBodyInjur类
public class PinAnBodyInjur implements BodyInjur{ public String getInfo() { return "平安保险:司机受伤!"; } } |
6) PiccCarDamage类
public class PiccCarDamage implements CarDamage{ public String getInfo() { return "中国人寿保险:车辆损坏!"; } } |
7) PinAnCarDamage类
public class PinAnCarDamage implements CarDamage{ public String getInfo() { return "平安保险:车辆损坏!"; } } |
8) PiccPersonInjur类
public class PiccPersonInjur implements PersonInjur{ public String getInfo() { return "中国人寿保险:人员受伤!"; } } |
9) PinAnPersonInjur类
public class PinAnPersonInjur implements PersonInjur{ public String getInfo() { return "平安保险:人员受伤!"; } } |
10) PiccOther类
public class PiccOther implements Other{ public String getInfo() { return "中国人寿保险:多种事故!"; } } |
11) PinAnOther类
public class PinAnOther implements Other{ public String getInfo() { return "平安保险:多种事故!"; } } |
12)InsuranceCompany接口
public interface Creator { public AutoInsurance getInsurObj(); } |
13)PiccFactory接口
public class PiccFactory extends InsuranceCompany{ public BodyInjur getBodyInjur() { return new PiccBodyInjur(); } public CarDamage getCarDamage() { return new PiccCarDamage(); } public PersonInjur getPersonInjur() { return new PiccPersonInjur(); } public Other getOther() { return new PiccOther(); } } |
14)PinAnFactory接口
public class PinAnFactory extends InsuranceCompany{ public BodyInjur getBodyInjur() { return new PinAnBodyInjur(); } public CarDamage getCarDamage() { Return new PinAnCarDamage(); } public PersonInjur getPersonInjur() { return new PinAnPersonInjur(); } public Other getOther() { Return new PinAnOther(); } } |
(6)心得体会
抽象工厂模式是工厂方法中范围最大的一个设计模式,它利用一个工厂层次类担负起创建所需要的的N组产品对象的责任,正如小米手机厂担负起生成手机、平板、智能手表的工作。这样当增加一个产品的时候,只需要增加对应的类,而不需要修改原来的代码,符合开闭原则;通过这次对抽象工厂的实现,以及之前两次工厂方法的实现,我基本掌握了工厂方法创建对象的设计模式,在以后的学习中一定要活学活用,用在实践中!