工厂模式的作用:
在一份1万行的代码中,需要使用ProductA类产生800个对象。 假如没有使用工厂设计模式,就必须使用800次new ProductA()创建对象实例。
如果需要对ProductA类的方法重新扩展,扩展为Producta类,就需要对源码进行修改800次,如果代码更长,需要修改更多源代码。而且可能产生各种各样的错误。不符合开闭原则。
开闭原则:
在面向对象编程领域中,开闭原则规定"软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的"。
代码实现:
定义Product接口
interface Product {
public void price();
}
定义两个产品,分别实现Product接口
class productA implements Product{
public void price(){
System.out.println("productA is 555");
}
}
class productB implements Product{
public void price(){
System.out.println("productB is 6666");
}
}
定义工厂类
class Factory {
public Product create_product(String name)
{
if (name.equalsIgnoreCase("productA")) {
return new productA();
}
else if (name.equalsIgnoreCase("productB")) {
return new productB();
}
return null;
}
}
主程序:
class Factory_Patten{
public static void main(String[] args) {
Factory factory = new Factory();
Product producta1= factory.create_product("productA");
producta1.price();
Product producta2= factory.create_product("productA");
producta2.price();
//假设主程序创建了800个productA对象,需要扩展productA对象。
Product productb= factory.create_product("productB");
productb.price();
}
}
运行结果
创建producta类替换prodoctA类
class producta implements Product{
public void price(){
System.out.println("I am producta, producta is 111111555");
}
}
修改工厂类
class Factory {
public Product create_product(String name)
{
if (name.equalsIgnoreCase("productA")) {
//return new productA();
return new producta(); //之前是A,用a替换A
}
else if (name.equalsIgnoreCase("productB")) {
return new productB();
}
return null;
}
}
修改后运行结果
完整代码
interface Product {
public void price();
}
class productA implements Product{
public void price(){
System.out.println("productA is 555");
}
}
class producta implements Product{
public void price(){
System.out.println("I am producta, producta is 111111555");
}
}
class productB implements Product{
public void price(){
System.out.println("productB is 6666");
}
}
class Factory {
public Product create_product(String name)
{
if (name.equalsIgnoreCase("productA")) {
//return new productA();
return new producta(); //之前是A,用a替换A
}
else if (name.equalsIgnoreCase("productB")) {
return new productB();
}
return null;
}
}
class Factory_Patten{
public static void main(String[] args) {
Factory factory = new Factory();
Product producta1= factory.create_product("productA");
producta1.price();
Product producta2= factory.create_product("productA");
producta2.price();
//假设主程序创建了800个productA对象,需要修改productA对象。
Product productb= factory.create_product("productB");
productb.price();
}
}



