设计模式剖析系列之工厂方法模式

By heiry on 2019-08-05 [ in 技术 ]

工厂方法模式

静态工厂方法只有一个工厂类,且如果要增加产品,则需要修改工厂类代码,违背了开闭原则。工厂方法模式则将工厂类颗粒化,为每一种产品单独设立一个工厂类。

工厂方法模式UML图

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
package staticfactory;
public interface Computer {
public abstract void cal();
}
package staticfactory; public interface Computer { public abstract void cal(); }
package staticfactory;

public interface Computer {
  public abstract void cal();

}
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
package net.mosang.factory;
public class Mac implements Computer {
@Override
public void cal() {
System.out.println("苹果电脑启动。。。。");
}
}
package net.mosang.factory; public class Mac implements Computer { @Override public void cal() { System.out.println("苹果电脑启动。。。。"); } }
package net.mosang.factory;
public class Mac implements Computer {

  @Override
  public void cal() {
    System.out.println("苹果电脑启动。。。。");
  }
}
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
package net.mosang.factory;
public class HP implements Computer {
@Override
public void cal() {
System.out.println("惠普电脑启动。。。。");
}
}
package net.mosang.factory; public class HP implements Computer { @Override public void cal() { System.out.println("惠普电脑启动。。。。"); } }
package net.mosang.factory;

public class HP implements Computer {

  @Override
  public void cal() {
    System.out.println("惠普电脑启动。。。。");

  }
}
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
package net.mosang.factory;
public interface ComputerFactoryBasic {
public abstract Computer CreateComputer();
}
package net.mosang.factory; public interface ComputerFactoryBasic { public abstract Computer CreateComputer(); }
package net.mosang.factory;

public interface ComputerFactoryBasic {
  public abstract Computer CreateComputer();
  
}
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
package net.mosang.factory;
public class MacFactory implements ComputerFactoryBasic {
@Override
public Computer CreateComputer() {
return new Mac();
}
}
package net.mosang.factory; public class MacFactory implements ComputerFactoryBasic { @Override public Computer CreateComputer() { return new Mac(); } }
package net.mosang.factory;

public class MacFactory implements ComputerFactoryBasic {

  @Override
  public Computer CreateComputer() {
    return new Mac();
  }

}
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
package net.mosang.factory;
public class HPFactory implements ComputerFactoryBasic {
@Override
public Computer CreateComputer() {
return new HP();
}
}
package net.mosang.factory; public class HPFactory implements ComputerFactoryBasic { @Override public Computer CreateComputer() { return new HP(); } }
package net.mosang.factory;

public class HPFactory implements ComputerFactoryBasic {

  @Override
  public Computer CreateComputer() {
    return new HP();
  }

}
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
package net.mosang.factory;
public class Client {
public static void main(String[] args) {
Computer computer = new MacFactory().CreateComputer();
Computer computer2 = new HPFactory().CreateComputer();
computer.cal();
computer2.cal();
}
}
package net.mosang.factory; public class Client { public static void main(String[] args) { Computer computer = new MacFactory().CreateComputer(); Computer computer2 = new HPFactory().CreateComputer(); computer.cal(); computer2.cal(); } }
package net.mosang.factory;

public class Client {

  public static void main(String[] args) {		
    Computer computer = new MacFactory().CreateComputer();
    Computer computer2 = new HPFactory().CreateComputer();
    computer.cal();
    computer2.cal();
    
  }
}

输出结果

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
苹果电脑启动。。。。
惠普电脑启动。。。。
苹果电脑启动。。。。 惠普电脑启动。。。。
苹果电脑启动。。。。
惠普电脑启动。。。。

 

 >>



© 2009-2024 MOSANG.NET DESIGNED BY HEIRY