工厂模式: 工厂模式可以负责实例化大量公共接口的类。工程模式可以动态决定哪个类被实例化,
消费者需要哪个产品就直接向工厂提出请求就可以了。工厂根据要求会去寻找这个类进行实例化。
简单工厂
通常是一个工厂有很多类,通过提供参数,返回几个产品中的一个类的实例对象。
用户不必关系内部实现。只需要提供一个名称就可以获得。
interface Car {
public String CarName();
}
class BenChi implements Car{
@Override
public String CarName() {
return "生产一辆奔驰汽车";
}
}
class BMW implements Car{
@Override
public String CarName() {
return "生产一辆宝马汽车";
}
}
public class SimplyFactory {
//工厂生产车的方法
public Car productCar(String carname){
if(carname.equals("奔驰")){
return new BenChi();
}else if(carname.equals("宝马")){
return new BMW();
}else {
return null;
}
}
public static void main(String[] args) {
SimplyFactory simplyFactory=new SimplyFactory();
Car newcar=simplyFactory.productCar("奔驰");
System.out.println(newcar.CarName());
}
}
工厂方法
用来生产同一等级结构中的固定产品,将类的实例化操作延迟到子类中完成
定义一个接口为抽象工厂,工厂和工厂各自实现接口,重写生产的方法。再定义一个接口,产品实现该接口方法。然后需要什么产品,直接调用该产品工厂的方法。
interface Factory{
Car productCar();
}
class BenChifactory implements Factory{
@Override
public Car productCar() {
return new BMW();
}
}
class BMWfactory implements Factory{
@Override
public Car productCar() {
return new BenChi();
}
}
public class FactoryMethod {
public static void main(String[] args) {
//需要一辆宝马
Factory newBaoMa=new BMWfactory();
System.out.println(newBaoMa.productCar().CarName());
}
}
抽象工厂
用于多个产品同时创建。主要是创建一些列相关的接口,然后产品的工厂之间实现他们各自的产品实例化。
实现一个工厂和相应产品的对应
interface Iproductor1 {
void product();
}
interface Iproductor2 {
void product();
}
interface IFactory {
Iproductor1 createthis1();
Iproductor2 createthis2();
}
class Duct1 implements Iproductor1 {
@Override
public void product() {
System.out.println("产品1");
}
}
class Duct2 implements Iproductor2 {
@Override
public void product() {
System.out.println("产品2");
}
}
class AllFactory implements IFactory {
@Override
public Iproductor1 createthis1() {
return new Duct1();
}
@Override
public Iproductor2 createthis2() {
return new Duct2();
}
}
public class AbstractFactory {
public static void main(String[] args) {
AllFactory allFactory = new AllFactory();
allFactory.createthis1().product();
}
}