关于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();
  }
 }

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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理