设计模式 Ⅰ
01. 简单工厂模式
使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数M,则返回一个Man对象,如果传入参数W,则返回一个Woman对象,请实现该场景。现需要增加一个新的Robot类,如果传入参数R,则返回一个Robot对象,对代码进行修改并注意女娲的变化。
模式结构图
实现代码
/* 抽象产品类 */
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());
}
}
}
结果截图
02. 工厂方法模式
海尔工厂(Haier)生产海尔空调(HaierAirCondition),美的工厂(Midea)生产美的空调(MideaAirCondition) 。使用工厂方法模式描述该场景,绘制类图并编程实现。
模式结构图
实现代码
/* 抽象工厂类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());
}
}
}
结果截图