/*
* 简单工厂模式:创建型模式
* 实现方式是有工厂类根据传入的参数动态创建某个产品
* 3中角色:
* ----工厂角色:核心,用来实例具体产品对象,被外界(客户端,主函数)直接调用
* ----抽象产品角色:本工厂的所有对象父类,负责所有实例的公共接口
* ----具体产品角色:主要实例目标,所有创建的对象都充当这个角色的具体类的实例
* 优点:
* 1、工厂是核心,它通过外界给的信息,做相应的逻辑处理创建具体的对象,所以用户无需考虑对象是如何创建的,利于优化
* 2、通过引入配置文件和反射,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性
* 缺点:
* 1、核心是工厂,工厂出了问题,所有客户端都会受到牵连
*
* ***典型应用:JDBC---把关系型数据库看成抽象产品,具体数据库(MySQL,Oracle)看成具体产品,而DriverManager是工厂类
* 使用的使用只需DriverManager的静态方法得到该数据库的Connection就行了
*
*/
package dpattern.hc.com;
/*
* 简单工厂模式/静态工厂模式
* 模拟计算器基本运算(+ - * /)
* */
//抽象产品
class Operation {
private double number1;
private double number2;
public Operation(double number1, double number2) {
super();
this.number1 = number1;
this.number2 = number2;
}
public Operation() {
super();
}
public double getNumber1() {
return number1;
}
public void setNumber1(double number1) {
this.number1 = number1;
}
public double getNumber2() {
return number2;
}
public void setNumber2(double number2) {
this.number2 = number2;
}
public double GetResult() {
double result = 0;
return result;
}
}
//具体产品
class OperationAdd extends Operation {
public double GetResult() {
double result = 0;
result = super.getNumber1() + super.getNumber2();
return result;
}
}
class OperationSub extends Operation {
public double GetResult() {
double result = 0;
result = super.getNumber1() - super.getNumber2();
return result;
}
}
//工厂
class OperationFactory1{
public static Operation createOperate(String operate) {
Operation oper = null;
switch (operate) {
case "+":
oper = new OperationAdd();
break;
case "-":
oper = new OperationSub();
break;
}
return oper;
}
}
public class SimpleFactory1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Operation operation;
operation=OperationFactory1.createOperate("+");
operation.setNumber1(10.0);
operation.setNumber2(20.0);
System.out.println(operation.GetResult());
}
}
package dpattern.hc.com;
class PhoneShop {
double price;
String type;
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public PhoneShop(double price, String type) {
super();
this.price = price;
this.type = type;
}
public PhoneShop() {
super();
}
public void SellPhone() {
System.out.println("手机类型:" + this.type + "价格:" + this.price);
}
}
class MiPhone extends PhoneShop {
public void SellPhone() {
System.out.println("手机类型:小米"+getPrice());
}
}
class HUAWEIPhone extends PhoneShop {
public void SellPhone() {
System.out.println("手机类型:华为");
}
}
class OperationFactory2 {
public static PhoneShop createOperate(String operate) {
PhoneShop phone = null;
switch (operate) {
case "xiaomi":
phone = new MiPhone();
break;
case "huawei":
phone = new HUAWEIPhone();
break;
}
return phone;
}
}
public class SimpleFactory2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
PhoneShop phoneShop;
phoneShop = OperationFactory2.createOperate("xiaomi");
phoneShop.setPrice(3999.0);
phoneShop.SellPhone();
phoneShop = OperationFactory2.createOperate("huawei");
phoneShop.SellPhone();
}
}