乐趣区

关于java:Java设计模式工厂模式

工厂模式

实质:创建对象不应用 new 而应用工厂办法代替。

简略工厂模式

工厂所治理的类的对立接口:Product

 public interface Product {void work();
 }

具体实现类:Phone 和 Computer

 public class Computer implements Product {
  @Override
  public void work() {System.out.println("computer work...");
  }
 }
 public class Phone implements Product {
  @Override
  public void work() {System.out.println("phone work...");
  }
 }

工厂类创立依据传入的名称创立对应产品:

 public class SimpleFactory {public static Product getProduct(String name){switch (name){
  case "phone":
  return new Phone();
  case "computer":
  return new Computer();
  default:
  return null;
  }
  }
  public static void main(String[] args) {Product phone = SimpleFactory.getProduct("phone");
  if (phone!=null){phone.work();
  }
  }
 }

长处:编写简略

毛病:每次新增一个产品类型都要改变 getProduct() 代码。

工厂办法模式

产品和简略工厂一样继承 Product

新增接口 ProductFactory 用于生成产品

 public interface ProductFactory {Product getProduct();
 }

新增理论产品的工厂

 /**
  * @author objcfeng
  * @description 电脑工厂
  * @date 2020/10/20
  */
 public class ComputerFactory implements ProductFactory {
  @Override
  public Product getProduct() {return new Computer();
  }
 }
 public class PhoneFactory implements ProductFactory {
  @Override
  public Product getProduct() {return new Phone();
  }
 }

测试类:

 public class Main {public static void main(String[] args) {new PhoneFactory().getProduct().work();
  }
 }

相较于简略工厂模式来说,解决了对批改敞开的不反对的问题,然而代码更简单。

形象工厂模式



产品不须要对立的接口,因为若都实现对立的接口,在产品工厂生产产品时,不好做辨别,须要传入参数做判断。

产品

手机接口

 public interface IPhoneProduct {void work();
 }

路由器接口

 public interface IRouterProduct {void work();
 }

产品的实现类:

 public class HuiWeiPhone implements IPhoneProduct {
  @Override
  public void work() {System.out.println("华为手机");
  }
 }

产品工厂

 public interface ProductFactory {IRouterProduct getRouter();
  IPhoneProduct getPhone();}

华为工厂

 public class HuaWeiFactory implements ProductFactory {
  @Override
  public IRouterProduct getRouter() {return new HuaWeiRouter();
  }
 ​
  @Override
  public IPhoneProduct getPhone() {return new HuiWeiPhone();
  }
 }

小米工厂:

 public class XiaoMiFactory implements ProductFactory {
  @Override
  public IRouterProduct getRouter() {return new XiaoMiRouter();
  }
 ​
  @Override
  public IPhoneProduct getPhone() {return new XiaoMiPhone();
  }
 }

测试:

 public class Main {public static void main(String[] args) {new XiaoMiFactory().getPhone().work();
  }
 }

形象工厂办法把一个品牌的产品很好的拆散开来,增加产品族(一个品牌的所有产品)很不便。

退出移动版